Office 365 OAuth2登录认证如何实现跨域请求?

Posted

技术标签:

【中文标题】Office 365 OAuth2登录认证如何实现跨域请求?【英文标题】:How to implement cross domain request for Office 365 OAuth2 login authentication? 【发布时间】:2020-01-24 06:08:58 【问题描述】:

我已将 Office 365 OAuth2 登录身份验证用于 ASP.NET Core API。当直接从浏览器访问此 API 时,这工作正常。但是,当我从 ajax 请求/其他另一个 Web 应用程序调用此 API 时,发生了以下 Cors 策略错误。

Access to XMLHttpRequest at 'https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize?client_id=e0745314-9236-4fr2c-a2fg0-c19cjfsfrrrb6b&scope=api%3A%2F%2Fe0745314-9236-4fr2c-a2fg0-c19cjfsfrrrb6b%2Ftestapi&response_type=code&redirect_uri=https%3A%2F%2Flocalhost%3A44332%2Fsignin-oidc&state=CfDJ8Kp1w7Ui3OZMswaNrHvqNR2MF9qKa9w3PILEMBv8s_zxSa3sMK1pQLr2EuNexhz8eM6
iDdbO2ciuxInNPCtbO1KJ31O_zXvOA_sMXHbAhzzkXKN9QDmrHMUOiQQdjXjam4EqKlopDpcE2vUxcus
4WehJCUfCqdQZjMuzZS7ovrxslRX2ueRNFqpSDichJCf_iduXgFV1bNLRM8gK0TmjUrdkdYtyji7BNsNdPP
o9Fhad' (redirected from 'https://localhost:44332/api/login/account') **from origin 'null'** has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我已尝试在启动文件中使用以下方法解决此问题。但是,我仍然遇到这个问题。

配置服务:

services.AddCors(o => o.AddPolicy("CorsPolicy", builder =>

builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
)); 

配置:

app.UseCors("CorsPolicy");

**Client Application** : http://localhost:5000  
**API** : http://localhost:44332  
**Login provider** : Office 365

请建议我在从 Office 365 获得授权后实现跨源并重定向到相应客户端应用程序 (http://localhost:5000) URL 的标准方法?

注意:从 API 重定向到 Microsoft 登录时,“origin”变为“null”。

【问题讨论】:

【参考方案1】:

服务器必须允许凭据。要允许跨域凭据,请调用 AllowCredentials:

services.AddCors(o => o.AddPolicy("CorsPolicy", builder =>

builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials();
)); 

【讨论】:

我也允许任何凭据。我仍然得到这个错误。重定向到 Microsoft 登录页面时,似乎我的来源变为空。

以上是关于Office 365 OAuth2登录认证如何实现跨域请求?的主要内容,如果未能解决你的问题,请参考以下文章

干货分享-Office 365单点登录及应用集成解决方案

Office365混合部署进阶系列教程四:ADFS联合身份认证

为啥我的 Office 365 OAuth2 刷新令牌总是这么快过期?

Office 365实现单点登录系列—配置单点登录

通过 Exchange ActiveSync (EAS) 为 Office365 使用 OAuth2

Office 365 客户端凭据中的错误回调授予 OAuth2 流