未从 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 中的用户身份的主要内容,如果未能解决你的问题,请参考以下文章
关于ADFS Server 2016的Oauth2的几个问题
ID4 ADFS 3.0 和 oidc-client (vue spa) - 回调实现
需要帮助使用 React-native、Spring Rest Api 和 ADFS 4.0 实施 OpenID 连接/OAuth2 流