如何获取当前用户';s在Azure静态Web应用程序的API(Azure函数)中的角色

如何获取当前用户';s在Azure静态Web应用程序的API(Azure函数)中的角色,azure,azure-static-web-app,Azure,Azure Static Web App,我想调用api,并在函数中根据用户角色决定要显示/返回的信息级别。 是否有人可以给出一个示例,说明如何在Azure静态Web应用程序的Azure功能中获取登录用户的角色 当通过“功能应用程序”部署Azure功能时,我可以获得角色和当前用户名,但使用“静态Web应用程序”我还没有弄清楚 命名空间函数1 { 公共类功能1 { [功能名称(“功能1”)] 公共静态异步任务运行( [HttpTrigger(AuthorizationLevel.Anonymous,“get”,“post”,Route=n

我想调用api,并在函数中根据用户角色决定要显示/返回的信息级别。 是否有人可以给出一个示例,说明如何在Azure静态Web应用程序的Azure功能中获取登录用户的角色

当通过“功能应用程序”部署Azure功能时,我可以获得角色和当前用户名,但使用“静态Web应用程序”我还没有弄清楚

命名空间函数1
{
公共类功能1
{
[功能名称(“功能1”)]
公共静态异步任务运行(
[HttpTrigger(AuthorizationLevel.Anonymous,“get”,“post”,Route=null)]HttpRequest请求,
索赔人(委托人)
{
IEnumerable roles=principal.Claims.Where(e=>e.Type.Equals(“roles”)).Select(e=>e.Value);
字符串名称=principal.Identity.name;
string responseMessage=$“你好,{name}。此HTTP触发的函数已成功执行。{string.Join(',',roles)}”;
返回新的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);
        }
publicstaticclaimsprincipal解析(HttpRequest-req)
{
var头=请求头[“x-ms-client-principal”];
var data=header.FirstOrDefault();
如果(数据==null){
返回null;
}
var decoded=System.Convert.FromBase64String(数据);
var json=System.Text.ascienceoding.ASCII.GetString(已解码);
var principal=JsonSerializer.Deserialize(json,新的JsonSerializerOptions{PropertyNameCaseSensitive=true});
principal.UserRoles=principal.UserRoles.Exception(新字符串[]{“匿名”},StringComparer.CurrentCultureIgnoreCase);
如果(!principal.UserRoles.Any())
{
返回新的ClaimsPrincipal();
}
var标识=新的索赔实体(委托人、标识提供人);
AddClaim(新的声明(ClaimTypes.NameIdentifier,principal.UserId));
identity.AddClaim(新索赔(ClaimTypes.Name、principal.UserDetails));
AddClaims(principal.UserRoles.Select(r=>newclaims(ClaimTypes.Role,r));
返回新的ClaimsPrincipal(标识);
}
这里有一个