从Postman获取访问令牌:为“单页应用程序”客户端类型发行的令牌只能通过跨域请求进行兑换

yiytaume  于 2023-04-20  发布在  Postman
关注(0)|答案(9)|浏览(272)

我们最近为我们的应用程序从隐式授权流切换到使用PKCE的授权代码流,现在我们从Postman获取Azure AD的访问令牌时遇到了一些问题。该应用程序在Azure AD中注册,我们基本上使用此处描述的Postman过程:https://developer.mypurecloud.com/api/rest/postman/index.html#enable_authorization。调用https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize端点工作正常,但在调用https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token时遇到错误:

"Error: Cound not complete OAuth 2.0 token request: "AADSTS9002327: Tokens issued for the 'Single-Page Application' client-type may only be redeemed via cross-origin requests.\r\nTrace ID: 8253f622-3425-4d0a-817c-281f86097300\r\nCorrelation ID: 9d84460f-ec02-4ace-af03-14d948e3d4ad\r\nTimestamp: 2020-04-15 14:02:03Z"

这是访问令牌请求:

我们如何使用Postman从Azure AD获取访问令牌和此授权流?

2admgd59

2admgd591#

显然,这是一个问题,因为文档令人困惑。
通过Azure Active Directory应用注册。请确保在“移动的和桌面应用程序”类别上添加重定向URL。
当你阅读文档时,看起来你需要在单页应用程序下添加 * 重定向URL*。它甚至显示确认消息说“* 您的重定向URI符合PKCE授权代码流的条件。*”但事实并非如此。

nwlqm0z1

nwlqm0z12#

当请求中缺少“Origin”标头时,可能会发生此错误(请参阅:GitHub评论)。
尝试添加header:

Origin: http://localhost
tvz2xvvm

tvz2xvvm3#

如果您在尝试使用Postman进行身份验证时遇到此故障,请确保您具有Web的平台身份验证。
转到Azure AD〉应用程序注册〉{your app reg}〉身份验证〉添加平台。使用浏览器时,重定向URI应为https://oauth.pstmn.io/v1/callback

nwlqm0z1

nwlqm0z14#

对我来说,我试图将MSAL v1实现更新到v2实现,在那里我遇到了这个问题。在Azure中从Web迁移到SPA之后,它显然需要相同的解决我的问题。
https://learn.microsoft.com/en-us/answers/questions/315313/azure-app-registration-causing-the-following-error.html
https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-browser#implicit-flow-vs-authorization-code-flow-with-pkce

f2uvfpb9

f2uvfpb95#

这是Postman在10.13版本之前的一个功能缺陷,当时他们引入了向OAuth流添加自定义头的功能

6yt4nkrj

6yt4nkrj6#

要获取refresh_token,必须将“offline_access”添加到作用域。
对访问令牌请求的响应的文档说明:
OAuth 2.0刷新令牌。应用可以使用此令牌在当前访问令牌过期后获取其他访问令牌。Refresh_tokens是长期有效的,可用于在较长时间内保留对资源的访问。有关刷新访问令牌的详细信息,请参阅以下部分。注意:仅在请求offline_access作用域时提供。
文件

xmjla07d

xmjla07d7#

我可以通过执行以下操作来解决此问题:
Azure Portal中:
1.导航至您正在使用的受保护API的【应用注册】。
1.接下来,导航到管理菜单中的身份验证刀片。
1.在您的单页应用平台中,添加如下重定向URI,https://oauth.pstmn.io/v1/callback
1.在Azure Portal中保存这些更改。
接下来,在Postman的新令牌配置中:
1.手动将回调URL设置为上面指定的相同URI(即https://oauth.pstmn.io/v1/callback)。
完成上述操作后,从Postman中清除您的cookie,并重新尝试检索令牌。

zazmityj

zazmityj8#

请按照以下步骤操作:
1.在您注册的应用程序中,添加移动的和桌面应用程序的平台,如下图所示:

1.获取将重定向到https://login.live.com/oauth20_desktop.srf?code=<code>.的代码
1.如果你使用Postman来获取token,那么可能会有跨域问题的机会。所以尝试下面的php代码来获取token:

<?php 
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,"https://login.microsoftonline.com/{tenenat-id}/oauth2/v2.0/token");
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS,
            "grant_type=authorization_code&code={auth-code}&client_id={client-id}&scope=https%3A%2F%2Fmanagement.azure.com%2F.default&redirect_uri=https://login.live.com/oauth20_desktop.srf");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $server_output = curl_exec($ch);
    curl_close ($ch);
    var_dump($server_output);
qvtsj1bj

qvtsj1bj9#

1.您应该先在浏览器中获取代码,在浏览器地址栏中输入以下请求信息:

2.然后在postman中输入获得的代码和其他请求信息,您将获得访问令牌

3。请检查:https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code-flow

相关问题