.NET将用户组添加到现有声明

时间:2019-06-17 09:35:51

标签: .net authentication azure-active-directory azure-ad-graph-api

我在进行AD身份验证时遇到了一些困难,我使用角度MSAL库登录用户,并将承载令牌发送到后端。

后端可以完美地处理它并存储用户声明。但是,发生的情况是用户属于AD的组不在此声明中。这是因为AD中的组太多,Azure仅返回“ hasgroups:true”。很好,我只是使用Graph API检索用户组。

现在我只是想知道,如何将检索到的组添加到现有用户声明中?我的最终目标是可以使用以下代码将某些组授权给控制器:

<tr *ngFor="let list of complianceReports.selectedData;let i = index">
    <td>
        <input type="checkbox" class="setup-checkbox" [(ngModel)]="complianceReports.attach[i]">{{i+1}}
    </td>
    <td>
        <input  type="checkbox" class="setup-checkbox" [(ngModel)]="complianceReports.link[i]">
    </td>
</tr>

1 个答案:

答案 0 :(得分:0)

要将Claim添加到ClaimsIdentity,您可以使用ClaimsIdentity.AddClaim(Claim) Method来使用ClaimType 'Role'

代码可能看起来像这样:

var claimsIdentity = context.Authentication.User.Identity as ClaimsIdentity;

if (claimsIdentity == null || !claimsIdentity.IsAuthenticated) 
{
    return;
}

claimsIdentity.AddClaim(new Claim(ClaimTypes.Role, "YourRoleHere"));

编辑:
当然,这只是一次性的操作,因为您不会在前端更新身份。因此,下一个呼叫将没有更新的身份。而且我希望您不想为出现的每个请求调用Graph API。对吗?

我能想到的一些选择:

  • 考虑将用户角色缓存在某个位置,然后在该会话期间针对每个请求从那里获取它们。例如,使用ActionFilter
  • 根据您使用的前端类型,查看是否可以在那里更新令牌。

为了能够更好地为您提供帮助,请对此进行更多调查,尝试一些尝试,并在无法解决问题时提出一个新问题。