【问题标题】:How to get the Username with OpenID Connect on ADFS Server如何在 ADFS 服务器上使用 OpenID Connect 获取用户名
【发布时间】:2022-01-12 00:04:09
【问题描述】:

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

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

现在我的问题是,如果在没有签名验证的情况下使用这些信息是安全的(因为我们没有 HS256 算法的私钥,并且据我了解验证是针对发行人的,而不是针对客户)。

【问题讨论】:

    标签: single-sign-on openid-connect adfs


    【解决方案1】:

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

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

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

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

    请找到以下文档链接,了解有关验证令牌及其所涉及的内在过程的更深入的详细信息:-

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

    【讨论】:

    • 您好@Anaconda,如果我的回答对您有帮助,您可以投票并接受它作为答案(点击答案旁边的复选标记,将其从灰色切换为已填充。)。这对其他社区成员可能是有益的。谢谢。
    【解决方案2】:

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

    您可以自己validate JWT。

    你应该经常检查签名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-24
      • 2013-12-02
      • 2021-10-18
      • 2019-08-12
      • 1970-01-01
      • 1970-01-01
      • 2019-09-21
      相关资源
      最近更新 更多