【问题标题】:Unable to generate authorization code via PKCE flow for SPA无法通过 SPA 的 PKCE 流程生成授权码
【发布时间】:2023-02-17 19:46:37
【问题描述】:

我在 Azure AD 中创建了一个 SPA 应用程序,并尝试通过邮递员的 PKCE 流生成访问令牌。

我正在关注这个 msdoc:Microsoft identity platform and OAuth 2.0 authorization code flow - Microsoft Entra | Microsoft Docs

要生成代码,我正在使用上面文档中提到的下面的授权端点,例如

https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
client_id=myclientid
&response_type=code
&redirect_uri=myredirecturi
&response_mode=query
&scope=https://graph.microsoft.com/.default
&code_challenge=YTFjNjI1OWYzMzA3MTI4ZDY2Njg5M2RkNmVjNDE5YmEyZGRhOGYyM2IzNjdmZWFhMTQ1ODg3NDcxY2Nl
&code_challenge_method=S256

但是我收到如下错误:

AADSTS501491: Invalid size of Code_Challenge parameter.

code_challenge 参数的有效值是多少以及如何生成它?

【问题讨论】:

  • 请检查您的code_challenge 值是否不超过43 个字符。
  • 是的,它超过了 43 个。我刚收到来自 Ms Doc 的相同 code_challenge。如何生成它?

标签: azure-active-directory postman pkce


【解决方案1】:

这个错误“Code_Challenge 参数的大小无效。”通常发生在code_challenge是无效的。确保生成有效的 code_ challenge。

生成code_challenge,你可以像下面这样使用这个tool

我在我的环境中尝试并成功获得了代码值,包括上面的代码挑战值:

确保包括origin标题如下:

包括所有必需的参数后,我能够通过 Postman 的 PKCE 流程成功生成访问令牌如下所示:

【讨论】:

    【解决方案2】:

    只需将您的散列剥离为 43 个字符。那么你的罚款。例如:

    $this->code_challenge = hash("sha256", random_bytes("96"));
    $code_challenge = substr($this->code_challenge, 0, 43)
    

    【讨论】:

      猜你喜欢
      • 2021-04-12
      • 2022-11-24
      • 2020-11-27
      • 2020-04-04
      • 2021-04-01
      • 2019-11-04
      • 2020-11-07
      • 2019-11-01
      • 2021-05-08
      相关资源
      最近更新 更多