如何在 ADFS 服务器上使用 OpenID Connect 获取用户名
Posted
技术标签:
【中文标题】如何在 ADFS 服务器上使用 OpenID Connect 获取用户名【英文标题】:How to get the Username with OpenID Connect on ADFS Server 【发布时间】:2022-01-12 00:04:09 【问题描述】:我刚刚意识到userinfoendpoint
没有提供有关登录用户的任何有用信息。
现在,我看到您可以从 ADFS tokenendpoint
获得 id_token
。这个id_token
实际上是一个包含unique_name
的JWT。
现在我的问题是,如果在没有签名验证的情况下使用这些信息是安全的(因为我们没有 HS256 算法的私钥,并且据我了解验证是针对发行人的,而不是针对客户)。
【问题讨论】:
【参考方案1】:• 您的问题有两种情况,即使用 ID_token 中的此信息是否安全。首先,您的客户端,即应用程序或授权服务器将验证令牌,就像它验证访问令牌是否有任何篡改一样。此外,它可以验证颁发者以确保正确的颁发者已发回令牌。由于有许多库可以验证 ID 令牌,因此您应该将它们用于 ID 令牌验证目的。
• 此外,只有机密的客户端应用程序才应该验证 ID 令牌,因为它们的令牌是保密的,而公共应用程序不会从验证 ID 令牌中受益,因为总是存在恶意用户可以拦截和编辑密钥的风险用于验证令牌。
• 正如您所说的那样,当您没有用于加密 ID 令牌的算法的私钥时,它必须是一个机密的客户端应用程序。因此,验证访问令牌行上的 ID 令牌并确认以下声明已由您的令牌验证库验证,然后您可以将这些声明中检索到的信息用于您的目的。需要验证的声明如下:-
-
时间戳:iat、nbf 和 exp 时间戳都应在当前时间之前或之后,视情况而定。
Audience:aud 声明应与您的应用的应用 ID 匹配。
Nonce:负载中的 nonce 声明必须与初始请求期间传递到 /authorize 端点的 nonce 参数匹配。
请找到以下文档链接,了解有关验证令牌及其所涉及的内在过程的更深入的详细信息:-
https://docs.microsoft.com/en-us/azure/active-directory/develop/access-tokens#validating-tokens
【讨论】:
您好@Anaconda,如果我的回答对您有帮助,您可以投票并接受它作为答案(点击答案旁边的复选标记,将其从灰色切换为已填充。)。这对其他社区成员可能是有益的。谢谢。【参考方案2】:不,遗憾的是 userinfo 端点只给你一个“子”。
您可以自己validate JWT。
你应该经常检查签名。
【讨论】:
以上是关于如何在 ADFS 服务器上使用 OpenID Connect 获取用户名的主要内容,如果未能解决你的问题,请参考以下文章
需要帮助使用 React-native、Spring Rest Api 和 ADFS 4.0 实施 OpenID 连接/OAuth2 流