【问题标题】:Azure AD: How to get group information in token?Azure AD:如何获取令牌中的组信息?
【发布时间】:2016-08-15 07:15:00
【问题描述】:

我们在 MEAN 堆栈中开发了应用程序。我们正在使用 adal-angular 库进行 azure 广告身份验证。根据documentation and sample

Adal.js 使用 OAuth 隐式流与 Azure AD 进行通信。你 必须为您的应用程序启用隐式流。

但是,当我们启用隐式流时,Azure AD 不会在令牌中包含组信息。该问题已在here 详细讨论并由@vibronet 确认

问题
Azure AD 功能几乎每天都在变化,那么上述答案是否仍然有效?我们还需要启用应用程序的隐式流吗?我想在令牌中获取组信息(我不想使用图形 api 作为解决方案。)

我问这个问题的另一个原因是我禁用隐式流程并且用户仍然能够访问该应用程序。但是我仍然没有在令牌中看到 group 信息。

【问题讨论】:

  • 您是否在应用程序清单中启用了组声明?为避免使用 GraphAPI,您将如何保证您的用户的组数永远不会超过令牌中允许的最大值?
  • 假设这也是你:social.msdn.microsoft.com/Forums/en-US/…,我看到你有。你看过原始的id_token(例如使用 jwt.io 之类的东西)吗?
  • @PhilippeSignoret 是的,就是我。如果 azure 从未在令牌中包含该信息,则不确定 jwt.io 将如何帮助我。我们还在解析和验证令牌的服务器上使用“passport-azure-ad”
  • 在论坛帖子中,您提出 也许 Azure AD 不会返回组。查看原始令牌可以让您确认它是否包含组(因此是库正在删除它们)。看来您已经确认不是。
  • 是的,我验证了 JWT 令牌,我已将 groupMembershipClaims" 配置为 "SecurityGroup"。当我这样做时,我得到了额外的属性 "hasgroup=true" 但不是实际的组 ID

标签: adal azure-active-directory


【解决方案1】:

Azure AD JWT确实在隐式流中发出安全组。 在应用程序注册清单中,设置"groupMembershipClaims": "SecurityGroup"

然后在你的服务器中:

var groups = new List<string>();
ClaimsPrincipal.Current.Claims
    .Where(t => t.Type == "groups")
    .ForEach(g => groups.Add(g.Value));

不需要 GraphApi

https://docs.microsoft.com/en-us/azure/architecture/multitenant-identity/app-roles https://github.com/Azure-Samples/active-directory-dotnet-webapp-groupclaims

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-15
    • 2023-04-04
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    相关资源
    最近更新 更多