UseOpenIdConnectAuthentication的CORS问题

时间:2019-05-29 10:10:54

标签: c# asp.net-web-api openid-connect

这里Angularjs是前端,Web API是中间层。我们正在使用AzureAD OpenID connect进行身份验证。
我正面临以下问题。由于我的目标网页未加载

从原始地址“ https%”访问“ https://login.microsoftonline.com/72f988bf-86f1-41af-91ab-2d7cd011db47/oauth2/authorize?client_id=xxxx1&response_mode=form_post&response_type=code%20id_token&scope=openid%20profile&state=OpenIdConnect.AuthenticationPropertiesxxxxx&noncexxxxx&redirect_uri=https%3A%2F%2Flocalhost%3A44300%2F&x-client-SKU=ID_NET451&x-client-ver=5.2.1.0”处的XMLHttpRequest(从“ https%3A%2F%2Flocalhost%3A44300%2F/api/Scorecard/GetServiceNameWithManagers?loginUser=xxx@microsoft.com”重定向) 3A%2F%2Flocalhost%3A44300%2F'已被CORS策略阻止:对预检请求的响应未通过访问控制检查:所请求的资源上没有'Access-Control-Allow-Origin'标头。

我已经做了大量研究,并在请求和响应时应用了Access-Control-Allow-Origin = *。还应用了app.UseCors(Owin.Cors.CorsOptions.AllowAll); 但到目前为止没有成功。

考虑以下代码,即使用户登录到Microsoft网站,AuthorizationCodeReceived委托也不会第一次调用。

请注意,此代码不是第一次工作。单击几次按钮(回发)后,它将运行,然后,如果我们运行该应用程序,则在几分钟后,它会引发CORS预检问题。请帮忙。

这是我的startup.cs

Not Found
The requested URL /about-us/ was not found on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

从原始地址“ https%”访问“ https://login.microsoftonline.com/72f988bf-86f1-41af-91ab-2d7cd011db47/oauth2/authorize?client_id=xxxx1&response_mode=form_post&response_type=code%20id_token&scope=openid%20profile&state=OpenIdConnect.AuthenticationPropertiesxxxxx&noncexxxxx&redirect_uri=https%3A%2F%2Flocalhost%3A44300%2F&x-client-SKU=ID_NET451&x-client-ver=5.2.1.0”处的XMLHttpRequest(从“ https%3A%2F%2Flocalhost%3A44300%2F/api/Scorecard/GetServiceNameWithManagers?loginUser=xxx@microsoft.com”重定向) 3A%2F%2Flocalhost%3A44300%2F'已被CORS策略阻止:对预检请求的响应未通过访问控制检查:所请求的资源上没有'Access-Control-Allow-Origin'标头。

1 个答案:

答案 0 :(得分:0)

我认为您误解了错误消息。它说您的AngularJS应用正在尝试向https://login.microsoftonline.com/72f988bf-86f1-41af-91ab-2d7cd011db47/oauth2/authorize发出请求,但失败了,因为这是一个跨域请求,并且服务器未通过在响应中返回Access-Control-Allow-Origin头来批准该请求预检请求(HTTP方法OPTIONS)。

因此,您无法通过在后端添加CORS标头来进行更改。 authorize不能被XMLHttpRequest请求调用-您应该向该URL发出完整的浏览器请求。稍后,浏览器将与身份验证代码或错误一起重定向到redirect_uri(请求参数值)。