如何在 ADFS 服务器上使用 OpenID Connect 获取用户名

How to get the Username with OpenID Connect on ADFS Server

我刚刚意识到 userinfoendpoint 没有提供有关登录用户的任何有用信息。

现在,我看到您可以从 ADFS tokenendpoint 获取 id_token。这个 id_token 实际上是一个包含 unique_name.

的 JWT

现在我的问题是,在没有签名验证的情况下使用此信息是否安全(因为我们没有 HS256 算法的私钥并且据我所知验证是发行人不为客户)。

不,遗憾的是 userinfo 端点只给你一个“sub”。

您可以自己 validate JWT。

您应该经常检查签名。

• 对于您使用来自 ID_token 的信息是否安全的问题,有两种情况。首先,您的客户端,即应用程序或授权服务器将验证令牌,就像它验证访问令牌是否有任何篡改一样。此外,它还可以验证发行者以确保正确的发行者已发回令牌。由于有许多库可以验证 ID 令牌,因此您应该将它们用于 ID 令牌验证目的。

• 此外,只有机密客户端应用程序才应验证 ID 令牌,因为它们的令牌是秘密的,而 public 应用程序不会从验证 ID 令牌中获益,因为始终存在恶意用户的风险可以拦截和编辑用于验证令牌的密钥。

• 正如您所说的,当您没有用于加密 ID 令牌的算法的私钥时,它必须是机密的客户端应用程序。因此,验证访问令牌行上的 ID 令牌并确认以下声明已由您的令牌验证库验证,然后您可以使用从这些声明中检索到的信息用于您的目的。需要验证的声明如下:-

  1. 时间戳:iat、nbf 和 exp 时间戳都应在当前时间之前或之后,视情况而定。
  2. 观众:aud 声明应与您的应用程序的应用程序 ID 匹配。
  3. Nonce:负载中的 nonce 声明必须与在初始请求期间传递到 /authorize 端点的 nonce 参数相匹配。

请查找以下文档 link 以获取有关验证令牌及其涉及的固有过程的更深入的详细信息:-

https://docs.microsoft.com/en-us/azure/active-directory/develop/access-tokens#validating-tokens