Azure B2C 自定义策略:请求无效,客户端密码错误

Posted

技术标签:

【中文标题】Azure B2C 自定义策略:请求无效,客户端密码错误【英文标题】:Azure B2C Custom Policies: Invalid Request, client secret error 【发布时间】:2017-10-31 21:24:45 【问题描述】:

我有一个要注册的 Azure B2C 自定义策略。当我尝试获取刷新令牌时,我收到此错误:

"error":"invalid_request","error_description":"AADB2C90079: Clients must send a client_secret when redeeming a confidential grant.\r\nCorrelation ID: 776e4226-467b-4648-b7f7-a9c09715fd68\r\nTimestamp: 2017-10-31 21:12:56Z\r\n"

我正在使用此网址登录:

https://login.microsoftonline.com/<MyTenant>.onmicrosoft.com/oauth2/authorize?
p=B2C_1A_signup_signin
&client_id=<MyB2CAppID>
&nonce=defaultNonce
&redirect_uri=http%3A%2F%2Flocalhost%3A4200
&scope=openid+offline_access
&response_type=code
&prompt=login

使用从上一个 url 获得的代码,我尝试使用这个 url 获取访问令牌:

https://login.<MyTenant>.com/exob2ctest.onmicrosoft.com/oauth2/v2.0/token?
p=B2C_1A_signup_signin
&grant_type=authorization_code
&client_id=<MyB2CAppID>
&redirect_uri=urn:ietf:wg:oauth:2.0:oo
&code=<MyCode>
&scope=openid%20offline_access
&client_secret=<MyB2CAppSecret>

之后我收到错误消息。 我在 client_secret 参数上使用在 client_id 中引用的 B2C 应用程序上生成的密钥。 当我使用内置策略尝试此操作时,我可以毫无问题地获得刷新令牌。我的自定义政策中是否缺少某些内容?

提前致谢!

【问题讨论】:

您是否尝试下载您的内置策略并查看它?有时它会给你一些提示。 您能否确认您将请求发送到 /token 作为 POST 请求,除了 p=B2C_1A_signup_signin 作为 x-www-form-urlencoded 正文之外的所有内容? 另外,为了确保请求没有差异,您可以在 fiddler 中捕获两个请求(使用内置和自定义策略)并比较以查看是否有任何差异。 谢谢!使用 url 上的策略和 x-www-form-urlencoded 正文中的其余参数解决了它。 很高兴听到这个消息,您能否为答案投票并将问题标记为已回答? 【参考方案1】:

您需要将您的请求作为 POST 请求发送到 /token 端点,并将策略参数作为查询字符串参数,其余的在 x-www-form-urlencoded 正文中。

【讨论】:

以上是关于Azure B2C 自定义策略:请求无效,客户端密码错误的主要内容,如果未能解决你的问题,请参考以下文章

Azure AD B2C 自定义策略

Azure AD B2C 自定义登录策略显示 SignUpSignIn

Azure B2C 自定义策略注册 UI - 删除显示名称

Azure AD B2C:自定义策略 - 登录不起作用

Azure AD B2C - 自定义策略中的“电子邮件”声明

Azure AD B2C密码更改自定义策略,用户每次都需要登录