C# 基于组角色的授权

C# 基于组角色的授权,c#,azure,authentication,authorization,role-based-access-control,C#,Azure,Authentication,Authorization,Role Based Access Control,我一直在尝试实现基于组的授权。 我已经使用以下内容实现了基于用户的授权: 使用此内容,是否有人知道如何更改我的代码,以便它能够处理组而不是角色?我继续在Azure中更改了清单,以包括securitygroups。任何帮助都将不胜感激。代码如下: internal class RoleAuthorizeAttribute : FunctionInvocationFilterAttribute { ... public override async Task OnExecutin

我一直在尝试实现基于组的授权。 我已经使用以下内容实现了基于用户的授权:

使用此内容,是否有人知道如何更改我的代码,以便它能够处理组而不是角色?我继续在Azure中更改了清单,以包括securitygroups。任何帮助都将不胜感激。代码如下:

internal class RoleAuthorizeAttribute : FunctionInvocationFilterAttribute
{
    ...

    public override async Task OnExecutingAsync(FunctionExecutingContext executingContext, CancellationToken cancellationToken)
    {
        if (!executingContext.Arguments.ContainsKey("principal"))
        {
            throw new AuthorizationException("Authentication failed. Missing claims.");
        }

        var claimsPrincipal = (ClaimsPrincipal)executingContext.Arguments["principal"];
        var roles = claimsPrincipal.Claims.Where(e => e.Type == "roles").Select(e => e.Value);

        var isMember = roles.Intersect(_validRoles).Count() > 0;
        if (!isMember)
        {
            throw new AuthorizationException("Authentication failed. User not assigned to one of the required roles.");
        }
    }
}

使用
claimsPrincipal.Claims.Where(e=>e.Type==“groups”)
获取组声明

groups声明只返回组id而不是组名称。您可以循环组id以使用Microsoft Graph查询组名称:
var group=wait graphClient.Groups[{group id}]].Request().GetAsync();
。然后您可以将它们与设置的组属性相匹配


请参阅Microsoft Graph reference。

是否尝试使用
claimsPrincipal.Claims.Where(e=>e.Type==“groups”)
?是的,问题是这些组没有返回组名,而是返回组id。我不确定如何将其与我为azure函数设置的组属性相匹配。