如何解决如何在 Azure 静态 Web 应用程序上的 APIAzure 函数中获取当前用户的角色
我想调用 api 并在函数中根据用户的角色决定显示/返回的信息级别。 有人可以举例说明如何在 Azure 静态 Web 应用程序上的 Azure 函数中获取已登录用户的角色吗?
通过“Function App”部署Azure Function时,我可以获取角色和当前用户名,但使用“Static Web App”我还没有弄清楚。
namespace Function1
{
public class Function1
{
[FunctionName("Function1")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous,"get","post",Route = null)] HttpRequest req,ClaimsPrincipal principal)
{
IEnumerable<string> roles = principal.Claims.Where(e => e.Type.Equals("roles")).Select(e => e.Value);
string name = principal.Identity.Name;
string responseMessage = $"Hello,{name}. This HTTP triggered function executed successfully. {string.Join(',',roles)}";
return new OkObjectResult(responseMessage);
}
}
}
解决方法
你可以这样访问,
public static ClaimsPrincipal Parse(HttpRequest req)
{
var header = req.Headers["x-ms-client-principal"];
var data = header.FirstOrDefault();
if(data == null) {
return null;
}
var decoded = System.Convert.FromBase64String(data);
var json = System.Text.ASCIIEncoding.ASCII.GetString(decoded);
var principal = JsonSerializer.Deserialize<ClientPrincipal>(json,new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
principal.UserRoles = principal.UserRoles.Except(new string[] { "anonymous" },StringComparer.CurrentCultureIgnoreCase);
if (!principal.UserRoles.Any())
{
return new ClaimsPrincipal();
}
var identity = new ClaimsIdentity(principal.IdentityProvider);
identity.AddClaim(new Claim(ClaimTypes.NameIdentifier,principal.UserId));
identity.AddClaim(new Claim(ClaimTypes.Name,principal.UserDetails));
identity.AddClaims(principal.UserRoles.Select(r => new Claim(ClaimTypes.Role,r)));
return new ClaimsPrincipal(identity);
}
这是一个sample
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。