刷新令牌azure b2c上不需要client_secret

时间:2018-04-09 15:50:20

标签: azure oauth-2.0 azure-active-directory azure-ad-b2c

我有一个天蓝色的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的用户?

提前致谢! 德语

1 个答案:

答案 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的详细信息。