我使用的是OAuth 2.0授权代码流,但我注意到我可以重用相同的授权代码,并且服务器会使用新的id令牌进行响应。
根据OAuth 2.0规范,客户端不得重复使用相同的授权码(https://www.rfc-editor.org/rfc/rfc6749#section-4.1.2)
我的策略中是否缺少任何设置?我在AzureB 2C中找到的关于代码授权代码流的唯一文档如下:https://learn.microsoft.com/en-us/azure/active-directory-b2c/configure-tokens?pivots=b2c-custom-policy#authorization-code-lifetime
编辑:
我使用以下端点生成了身份验证代码:
https://tenant.b2clogin.com/tenant/policy/oauth2/v2.0/authorize?client_id=clientid&response_type=code&redirect_uri=https://jwt.ms&scope=openid&response_mode=query&code_challenge=codechallenge&code_challenge_method=S256
我使用如下参数生成了访问令牌:
但仍然能够使用相同的代码生成令牌
这是我的新应用程序:
2条答案
按热度按时间vm0i2vca1#
我尝试在我的环境中重现相同的错误,但在尝试重用auth-code时出现如下错误:
我创建了Azure AD B2C应用程序并添加了SPA重定向URI,如下所示:
我使用以下端点生成了auth-code:
我使用如下参数生成了访问令牌:
当我尝试重用代码时,我得到了如下错误:
prompt
**登录时收到提示。更新和重大更改-Microsoft Entra
6ie5vjzr2#
如果您没有使用nonce声明,则此预期行为是由于B2C的已知限制。
根据RFC (6749) - The OAuth 2.0 Authorization Framework
验证码只能使用一次。
对于标准Azure AD,2018年发布了一个修复程序:
Azure Active Directory中断更改引用|微软文档
这是因为B2C是无状态的,在这里不遵循OTP RFC标准。标准Azure AD早在2018年就制定了跟踪和使AuthZ代码无效的工程规定,但Azure AD B2C尚未完成这项工作。B2C必须成为有状态服务,这是一项重大投资。因此,虽然这是一个已知问题,但这项工作目前尚未完成。
解决方法是使用nonce claim。
另请参阅:B2C nonce