【问题标题】:.NET Add user groups to existing claim.NET 将用户组添加到现有声明
【发布时间】:2019-06-17 09:35:51
【问题描述】:

我在 AD 身份验证方面遇到了一些困难,我使用 Angular MSAL 库登录用户并将持有者令牌发送到后端。

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

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

[Authorize(Roles = "EmployeeOnly")]

【问题讨论】:

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


    【解决方案1】:

    要将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
    • 根据您使用的前端类型,查看是否可以在此处更新令牌。

    为了能够更好地帮助您,请对此进行更多调查,尝试一些方法,如果无法正常工作,请提出新问题。

    【讨论】:

    • 谢谢!这完美无缺。但是,当我对我的 API 进行新调用时,我刚刚添加的声明消失了。很可能是因为 API 使用从前端发送的新不记名令牌覆盖了声明。您认为解决此问题的最佳方法是什么?在执行任何其他控制器方法之前,我是否需要每次都执行此控制器方法?还是我应该做一个基类之类的?
    • 请使用附加信息更新您的问题。我已经更新了我的答案以提供更多背景信息。
    • 这可能是 IClaimsTransformation 接口的用例。我在这里对我自己的问题的回答进行了描述:stackoverflow.com/a/57999880/3241128
    猜你喜欢
    • 2022-12-04
    • 2021-03-25
    • 2021-03-31
    • 1970-01-01
    • 2019-04-25
    • 2019-02-17
    • 2016-05-19
    • 2015-02-14
    • 1970-01-01
    相关资源
    最近更新 更多