AADSTS9002325:跨域授权码兑换需要代码交换证明密钥

use*_*804 14 azure-active-directory

我创建了一个spa仅由我的组织拥有的应用程序,但是在我请求代码时出现了问题。我该如何解决?

在此处输入图片说明

Car*_*hao 31

我可以重现您的问题,您必须在网络下添加重定向 URL (不是单页应用程序)。之后,您将能够使用身份验证代码流来获取代码

在此处输入图片说明

类似的问题?请参阅:hereherehere

  • 现在我收到一条消息“仅允许‘单页应用程序’客户端类型进行跨域令牌兑换”这是一个经过认证的微软时刻 (19认同)
  • 谢谢你,这个和Fiddler的建议(这里:https://learn.microsoft.com/en-us/answers/questions/270056/aadsts50011-the-reply-url-specified-in-the-request-17.html )暴露了这样一个事实:无论我在 azure 中为站点注册重定向 uri 配置了什么,MS Login 都会发送带有“./.auth/login/aad/callback”后缀的重定向设置。在“Web”注册配置文件中匹配它就可以了。顺便说一句,我有一个 SPA,使用 MSAL2 并将 redirectUri 设置为“location.origin”,这适用于本地和发布。 (3认同)

JRi*_*dsz 7

接受的答案有问题:问题是针对SPA WEB 的,但建议的解决方案是将其更改为SSR WEB

对于 ssr webs,使用的流程称为OAuth 2.0 授权代码流程,其中在成功登录(302 重定向)后从 Microsoft 发送代码,并将此代码交换为新的 access_token (微软内部 api)。

对于水疗网站,有时没有可编程后端服务器来服务网络文件(index.html、js、css),能够接收代码并将其交换为 access_token。使用的流程称为OAuth 2.0 隐式授权流程,其中 ID 令牌或访问令牌在成功登录后直接从 Microsoft 返回(302 重定向)

注意:隐式授权流程在某些 IAM 平台中已被弃用

如果您正在使用纯 React、Angular、Vue 等开发Spa Web ,而不是使用 Java、C#、PHP 等或 Nuxt、Next 等混合型的 ssr Web,并且您需要 access_token而不是身份验证代码 (ssr),那么您应该按着这些次序:

步骤1

将您的应用程序注册为管理员或简单用户

https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade

在此输入图像描述

第2步

添加 Web 平台类型 SPA 并重定向到您的 SPA

在此输入图像描述

步骤3

选中访问令牌复选框

在此输入图像描述

步骤4

在此步骤中,您应该能够获取此类登录的经典值(google、facebook、microsoft 等):clientid、clientsecret、reduirect_uri、tenant 等

在此输入图像描述

在此输入图像描述

步骤5

在 spa 源代码层,将授权 url 中的response_type=code更改为response_type=token

https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&response_type=token
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&scope=openid
&response_mode=query
Run Code Online (Sandbox Code Playgroud)

额外的

如果一切正常,所有最终用户都将在登录步骤中收到类似以下的提示:

在此输入图像描述

是的,这是另一个“Azure 功能”。无论如何,谁告诉你使用微软的工具?

为了避免这种情况,请在管理员的帮助下批准它或按照这些无限步骤将您的应用程序标记为已验证

参考:


归档时间:

查看次数:

10381 次

最近记录:

5 年 前