0

我一直在尝试实施基于组的授权。我已经继续使用以下内容实现了基于用户的授权: https ://medium.com/medialesson/role-based-authorization-in-azure-functions-with-azure-ad-and-app-roles-b1fed5714c91

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

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.");
        }
    }
}
4

1 回答 1

0

用于claimsPrincipal.Claims.Where(e => e.Type == "groups")获取团体声明。

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

请参阅此处的Microsoft Graph 参考。

于 2020-10-22T07:44:33.523 回答