小编chr*_*rsi的帖子

Active Directory 是否不支持 PKCE 的授权代码流?

我尝试使用当前推荐的授权代码流和 PKCE 从 Active Directory 收集访问令牌。客户端将是一个公共 Angular SPA,这是选择流程的原因。

收集 openid-configuration 表单 AD 以及用户的授权代码效果很好。但是我无法从以下端点请求访问令牌:

https://login.microsoftonline.com/{tenantId}/oauth2/token.
Run Code Online (Sandbox Code Playgroud)

我试图在 Postman 中重建请求:

POST /7e8c2868-7490-4dd7-82b7-f5ec29222d30/oauth2/token HTTP/1.1
Host: login.microsoftonline.com
Accept: application/json, text/plain, */*
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache

grant_type=authorization_code
code=...
code_verifier=...
client_id=...
redirect_uri=...
Run Code Online (Sandbox Code Playgroud)

...并最终得到以下消息:

{
  "error": "invalid_client",
  "error_description": "AADSTS7000218: The request body must contain the following parameter: 'client_assertion' or 'client_secret'.\r\nTrace ID: ed0413ad-89f1-4a2b-8d68-e23498701800\r\nCorrelation ID: deb53b0d-5398-4f72-a9a5-6c0863547b99\r\nTimestamp: 2020-03-06 09:30:36Z",
  "error_codes": [
    7000218
  ],
  "timestamp": "2020-03-06 09:30:36Z",
  "trace_id": "ed0413ad-89f1-4a2b-8d68-e23498701800",
  "correlation_id": "deb53b0d-5398-4f72-a9a5-6c0863547b99",
  "error_uri": "https://login.microsoftonline.com/error?code=7000218"
}
Run Code Online (Sandbox Code Playgroud)

这看起来很奇怪,因为带有 PKCE 的身份验证流程的官方规范不需要 client_secret 或 client_assertion。这仅对默认身份验证流程是必需的。

AD 实现有问题还是我配置错误? …

active-directory oauth-2.0 azure-active-directory pkce

4
推荐指数
1
解决办法
1892
查看次数