【问题标题】:Validating ID token with signature in Azure Active Directory B2C在 Azure Active Directory B2C 中使用签名验证 ID 令牌
【发布时间】:2016-07-13 16:58:20
【问题描述】:

我在验证 Azure Active Directory B2C 身份验证期间获得的 ID 令牌的签名时遇到问题。

我正在查看这组说明: [https://azure.microsoft.com/en-us/documentation/articles/active-directory-b2c-reference-tokens/#token-validation][Azure AD B2C 预览:令牌参考>令牌验证]

所以,我正在尝试不同的 Python 3 包来尝试验证签名,它们似乎都需要 JWT,即 ID 令牌,以及“密钥”或“秘密”,即公钥验证签名。

需要明确的是,Azure Active Directory B2C ID 令牌是使用 RS256 签名的:

{'alg': 'RS256'} // Found in header of ID token

我正在使用此链接获取密钥:

https://login.microsoftonline.com/<b2c_directory>.onmicrosoft.com/discovery/v2.0/keys?p=b2c_1_sign_in

此链接返回一个 JSON 字符串,其中包含以下键: “孩子”、“使用”、“kty”、“n”、“e”

根据我的阅读,“n”和“e”密钥与验证签名所需的公钥有关。我已经尝试过单独和串联(n+e 和 e+n),但我无法验证该签名。

我正在使用 PyJWT,但我不介意使用其他 Python 3 包,只要它能成功验证签名,即使有人已经弄清楚如何使用 OpenID 进行身份验证,也可以使用 adal。

【问题讨论】:

  • 所以“e”是指数,“n”是模数。有谁知道如何将它们结合起来生成一个适合验证 ID Token 签名的公钥?
  • 如果您在这里查看:load_rsa_pub_key()。 github.com/jpadilla/pyjwt/blob/…您可能对如何使用公钥有所了解。

标签: python azure rsa jwt azure-active-directory


【解决方案1】:

@Ed,据我所知,我们通常使用指数(短名称'e')和模数(短名称'n')来生成RSA签名中的公钥。 你可以参考这个页面(https://en.wikipedia.org/wiki/RSA_(cryptosystem)):

公钥由模数 n 和公钥(或 加密)指数 e.私钥由模数 n 和 必须保密的私有(或解密)指数 d。磷, q 和 φ(n) 也必须保密,因为它们可用于 计算 d。

一般来说,我们应该对它们进行编码并获取 int 值。我建议您可以参考“Brent Schmaltz”表格的链接(https://github.com/jpadilla/pyjwt/blob/c5ee34e86bc42bef60ef6e701df569c2c86a5d5d/tests/keys/init.py)。您还可以分享如何在项目中使用签名。 问候,

【讨论】:

    【解决方案2】:

    您可以关注https://play.golang.org/p/7wWMBOp10R 并将变量“js”替换为您从发现网址获得的值。运行 sn-p 并将整个输出复制到 https://jwt.io 以及要验证的 jwt 令牌,并查看签名是否有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-06
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多