【问题标题】:CORS error while authorize application to call API Azure AD?授权应用程序调用 API Azure AD 时出现 CORS 错误?
【发布时间】:2021-07-04 00:42:13
【问题描述】:

在 React 中通过 fetch() 调用 API,但出现 CORS 错误。 https://login.microsoftonline.com/tenant_id/oauth2/v2.0/authorize?client_id=xxxxxxxxxxxxxxxxxxxxx&response_type=code&redirect_uri=http://localhost:3050&scope=user.Read.All&response_mode=query

以上 URL 由 Postman 制作,如果直接粘贴到浏览器上,则可以正常工作。

2.有没有办法安全地获取代码,即在正文中而不是在查询中获取响应代码?

尝试将 Allow-access-origin 的获取中的标头传递给 *。

【问题讨论】:

  • 请在发布问题时进行描述,您能否提供来自浏览器网络选项卡的请求截图。这将有助于找到解决方案。
  • 添加截图。感谢 FYI,尝试了修正的标头 requestHeaders.set('Content-Type', 'application/json; charset=utf-8'); requestHeaders.set('mode',"no-cors") requestHeaders.set('referrerPolicy','no-referrer'); // requestHeaders.set('Access-Control-Allow-Origin','localhost:3050*') requestHeaders.set('Accept','/*')

标签: reactjs azure-active-directory msal azure-ad-graph-api react-aad-msal


【解决方案1】:

我们需要 use msal 做出反应以避免 CORS 问题。微软还提供了一些 react 应用的示例,可以看this document。在这里我测试了this sample code。我还注册了一个 azure ad 应用程序并设置了重定向 url http://locahost:3000,这是我的配置:

enter image description here enter image description here

正如您在 App.jsx 中看到的,它使用下面的代码生成访问令牌并使用它调用图形 api,无需在浏览器中显示验证代码,因为令牌是静默获取的。我认为这可以满足您的要求。

function RequestProfileData() {
        // Silently acquires an access token which is then attached to a request for MS Graph data
        instance.acquireTokenSilent({
            ...loginRequest,
            account: accounts[0]
        }).then((response) => {
            callMsGraph(response.accessToken).then(response => setGraphData(response));
        });
    }

=========================更新==================

对于你的问题2,我认为this may help you:

【讨论】:

  • 如果您觉得我的帖子对您​​有帮助,请标记为答案,对遇到类似问题的其他人有帮助。如果您还有其他问题,请随时在此处更新,在此先感谢:)
  • 嗯,我可以使用 MSAL 交互,使用用户的凭据,它的每件事都可以正常工作。我想要的是无需用户登录即可从 Azure AD 访问信息。有点使用应用程序凭据和秘密我想要访问令牌来获取数据。这就是我想要的场景。但我认为我使用了错误的方法只是一种直觉。请帮助我如何设置。谢谢:)
  • 是的,谢谢先生的回复,我不得不说,azure ad 为不同的场景提供了几个流程来生成访问令牌,包括使用客户端 id 和密钥(客户端凭据流),这个流程允许应用程序无需用户登录即可生成访问令牌,但仅适用于daemon applications。但如果你考虑nodejs,我认为this answer 可以帮助你。
  • 您如何看待这个案例?您还有其他问题吗?
  • 嗯,我只是使用 React 来处理和获取来自 API nodejs 的数据,直到现在还没有出现。我有一种方法可以在不调用 /authorize 的情况下使用客户端凭据获取令牌,我们可以使用 grant_type 客户端凭据调用 /token。邮递员工作正常,我可以获取令牌,但与浏览器中的 Fetch() NO-CORS 问题相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-17
  • 2021-01-04
  • 2016-06-10
  • 2022-09-23
  • 1970-01-01
  • 2017-03-07
相关资源
最近更新 更多