我有一个天蓝色的b2c应用程序。当我通过portal.azure.com中的Users应用程序创建用户(或使用邮递员发布帖子请求)时,我必须发送我的b2c应用程序的client_secret来刷新令牌。 但是通过使用azureAD模块通过Powershell创建的用户,我有一个错误,说我不应该发送client_secret。
{
"error": "invalid_request",
"error_description": "AADB2C90084: Public clients should not send a client_secret when redeeming a publicly acquired grant.\r\nCorrelation ID: 39abec35-770c-42e6-bd65-438d6501a124\r\nTimestamp: 2018-04-09 14:43:13Z\r\n"
}
为什么会有这种差异?如何使用图形api创建不需要client_secret的用户?
提前致谢! 德语
答案 0 :(得分:1)
根据错误消息,我假设您使用的应用程序是原生应用(正如juunas所说,Powershell也是原生应用),它也称为Oauth的公共客户端。只有当您的应用程序是Web App / API(在Oauth中也称为机密客户端)时,才需要client_secret
。
使用原生应用
刷新访问令牌// Line breaks for legibility only
POST /{tenant}/oauth2/token HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&refresh_token=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq...
&grant_type=refresh_token
&resource=https%3A%2F%2Fservice.contoso.com%2F
注意:您在应用注册中创建的应用程序密码 您的应用的门户网站。它不能在本机应用程序中使用(公共 客户端),因为
client_secrets
无法可靠地存储在设备上。 它是Web应用程序和Web API(所有机密客户端)所必需的, 它能够安全地存储client_secret
服务器端。
因此,您只需删除请求正文中的client_secret
即可解决此问题。
此外,Azure AD B2C不支持client_credentials流。查看有关此here的详细信息。