我很难通过Azure AD B2C的OAuth 2.0 API接收 access_token 和 refresh_token 。
我关注描述OAuth 2.0授权代码流的official guide。
通过Microsoft提供的交互式登录网站接收 authorization_token 工作正常(网址:https://login.microsoftonline.com/[MY_TENANT]/oauth2/v2.0/authorize?client_id=[CLIENT_ID]&response_type=code&response_mode=query&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=[CLIENT_ID]%20offline_access&p=[MY_SIGNUP_SIGNIN_POLICY]
)。
但是,当尝试通过文档中所述的简单POST请求获取 access_token 时,我收到了404 Not Found以及以下POST请求:
URL: https://login.microsoftonline.com/[MY_TENANT]/oauth2/v2.0/token?p=B2C_1_sign_in
Header: Content-Type application/x-www-form-urlencoded
Payload: grant_type=authorization_code&client_id=[CLIENT_ID]&scope=[CLIENT_ID]%20offline_access&code=[AUTHORIZATION_CODE]&redirect_uri=urn:ietf:wg:oauth:2.0:oob
那时文档是否错误?
注意:由于框架原因,我无法使用任何提供此登录过程的现有.NET或Java库。一个C ++库可以。
我非常希望他们以符合标准的方式实现通常完整的无头OAuth2协议......
答案 0 :(得分:1)
问题在于我对文档的误解。
策略(查询参数p
)在所有情况下都必须相同。因此,POST请求的URL必须是:
https://login.microsoftonline.com/[MY_TENANT]/oauth2/v2.0/token?p=MY_SIGNUP_SIGNIN_POLICY
MY_SIGNUP_SIGNIN_POLICY
与登录网址完全相同。