C# 基于组角色的授权
我一直在尝试实现基于组的授权。 我已经使用以下内容实现了基于用户的授权: 使用此内容,是否有人知道如何更改我的代码,以便它能够处理组而不是角色?我继续在Azure中更改了清单,以包括securitygroups。任何帮助都将不胜感激。代码如下: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
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函数设置的组属性相匹配。