【问题标题】:client_secret not required on refresh token azure b2c刷新令牌 azure b2c 不需要 client_secret
【发布时间】:2018-09-19 02:04:09
【问题描述】:

我有一个天蓝色的 b2c 应用程序。当我通过 portal.azure.com 中的用户应用程序创建用户(或使用邮递员发出发布请求)时,我必须发送我的 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 的用户?

提前致谢! 德语

【问题讨论】:

  • 我不太明白这个问题。您的意思是,如果您尝试登录,则会收到此错误?错误消息本身很清楚,您不要在公共客户端(例如 PowerShell 模块)中使用客户端机密。

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


【解决方案1】:

根据报错信息,我假设你使用的App是原生应用(如juunas所说,Powershell也是原生应用),在Oauth中也叫公共客户端. client_secret只有当你的应用是Web App/API时才需要,在Oauth中也称为机密客户端。

使用 Native App 刷新访问令牌:

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

【讨论】:

  • 嗨,@Germán Svriz。这个答案有用吗?
  • 嗨!谢谢!我现在知道,当我生成没有客户端密码的刷新令牌时,我可以刷新我的令牌,而无需在请求中传递客户端密码。
猜你喜欢
  • 2018-01-21
  • 2018-01-08
  • 1970-01-01
  • 1970-01-01
  • 2020-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-25
相关资源
最近更新 更多