如何在 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 流

Web Api 如何在隐式(或授权)授权流(OpenId)中验证令牌?

如何开发采用ADFS安全性的应用程序?对DEV阶段感兴趣

如何将ADFS用户添加到`AspNetUsers`中?

如何在 Java 程序中从 IdP-ADFS 获取用户?

Azure AD B2C OpenID使用WS-Federation和SAML声明提供程序连接单一注销