未从 ADFS 3.0 获取用于 OAuth2 访问令牌的 JWT 中的用户身份

Posted

技术标签:

【中文标题】未从 ADFS 3.0 获取用于 OAuth2 访问令牌的 JWT 中的用户身份【英文标题】:Not getting user identity in JWT used in OAuth2 access token from ADFS 3.0 【发布时间】:2016-04-21 09:36:39 【问题描述】:

我正在通过以下方式使用 ADFS 3.0 中支持的授权流程,

    浏览器连接到 MyService MyService 将浏览器重定向到 ADFS 以进行 OAuth 浏览器连接到 ADFS 以获取 OAuth 授权代码 ADFS 通过浏览器对用户进行身份验证 ADFS 将浏览器连同授权码一起重定向回 MyService 浏览器连接到 MyService 并传递授权令牌 MyService 连接到 ADFS 并从授权令牌中获取访问令牌

但是,访问令牌缺少用户身份,MyService 无法识别用户。

访问令牌具有以下 JWT 信息。

"aud": "urn:relying:party:trust:identifier", “是”: "http://ms.cloud.com/adfs/services/trust", "iat": 1452875046, "exp": 1452878646, "auth_time": "2016-01-15T15:35:20.248Z", “授权方法”: "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport", “版本”:“1.0”, “appid”:“我的应用程序”

有人可以告诉我 MyService 从 ADFS 获取访问令牌后如何识别用户吗?

【问题讨论】:

【参考方案1】:

依赖方信任中的声明规则需要定义要作为 JWT 令牌的一部分发送的声明。一旦我们添加了电子邮件、姓名等的声明规则,这些信息就会添加到 JWT 访问令牌中。

【讨论】:

我们现在遇到了类似的问题,索赔规则是什么,您是如何添加它们的?谢谢 是的,对如何解决此问题的详细说明非常感兴趣。 我尝试添加它们,玩弄各种声明规则,但似乎没有一个对 JWT 令牌包含的内容产生影响。还有更多指针吗? - 也许我没有正确理解“依赖方”的概念。【参考方案2】:

    编辑 ADFS 中 Active Directory 的声明提供程序信任以传递电子邮件、姓名等。

    打开 ADFS。单击“索赔提供者信托”。单击“活动目录”。 然后,单击右侧的“编辑声明规则”。 您现在应该看到“编辑声明”对话框。 有关说明:添加声明,请参阅此视频。跳到时间索引 2:40。 Edit Claims Provider Rules

    编辑信赖方信托的声明。对于电子邮件、姓名等,使用 LDAP 作为规则类型添加匹配的颁发转换规则,并选择 Active Directory 作为属性存储源。为此,请为与您的 JWT 客户端关联的依赖方信任重复上述步骤。 要添加依赖方声明,请参阅此视频并跳至时间索引 14:35 Edit Relying Party Claim Rules

我建议将 SAM-Account-Name 作为 http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name 传递。我隐约记得 WIF 有问题 /w the ClaimsPrincipal 如果你不这样做的话。

此外,如果您尚未启用 Active Directory 上的声明支持,则必须启用。

【讨论】:

以上是关于未从 ADFS 3.0 获取用于 OAuth2 访问令牌的 JWT 中的用户身份的主要内容,如果未能解决你的问题,请参考以下文章

AFNetworking 3.0 未从响应中获取 json

关于ADFS Server 2016的Oauth2的几个问题

ADFS 3.0 无法使用默认配置绑定服务端点

ID4 ADFS 3.0 和 oidc-client (vue spa) - 回调实现

ADFS 3.0 和非声明感知应用程序、身份验证问题

需要帮助使用 React-native、Spring Rest Api 和 ADFS 4.0 实施 OpenID 连接/OAuth2 流