cors - 启用 CORS 的 Web Api 2 facebook 身份验证

标签 cors asp.net-web-api2

我正在尝试使用 Angular JS 为我的前端实现内置外部身份验证的 Web Api 2。我使用以下行启用了 owin cors:

app.UseCors(CorsOptions.AllowAll);

我成功地加载了外部登录,就像他们在 SPA 模板中使用这个 api 调用一样 - api/Account/ExternalLogins?returnUrl=%2F&generateState=true

当用户单击调用此 api 的按钮时,我使用响应中的 URL

htp://localhost:31683/api/Account/ExternalLogin?>provider=Facebook&response_type=token&client_id=self&redirect_uri=http%3A%2F%2Flocalhost%3A>31683%2F&state=EqHaUDzzuXZcVSk7IC_gWkgF5P_TNTdIHn1Tqbv18CM1



正如预期的那样,User.Identity.IsAuthenticated 尚未通过身份验证,因此它返回 ChallengeResults(与 SPA 模板完全一样),它应该将用户重定向到 facebook 登录页面。这就是我的问题所在。 Fiddler 中的响应看起来不错,它具有重定向到 facebook 登录页面的位置响应 header 。但是,当它尝试进行重定向时,我收到以下 CORS 错误:

请求的资源上不存在“Access-Control-Allow-Origin” header 。因此,不允许访问 Origin 'null'。

enter image description here

看起来好像我对 facebook 登录的重定向请求有一个带有空值的 Origin header 。我相信这个 Origin header 就是为什么它寻找 facebook 没有提供的 AllowCors 响应。我不确定为什么 Origin header 在重定向请求中,或者这是否就是问题所在。

下面是 chrome 响应对我的 api/Account/ExternalLogin api 的 api 调用然后重定向调用的屏幕截图。

我的 ExternalLogin 响应:
enter image description here

Facebook 重定向响应。这就是我认为的问题所在。请注意请求中的原始标题
enter image description here

任何帮助将不胜感激。我已经为此投入了很多时间。谢谢。

最佳答案

这不完全是您问题的答案,但是,我认为这可能会对您有所帮助。

我在尝试这样做时遇到了类似(或相同)的问题,但使用的是 ASP.NET MVC 5。

当不使用 CORS 时,您描述的过程就像一个魅力。我也在用。这很棒!有用。当使用 CORS 时,问题就开始了。

经过 2 天的痛苦和折磨,我从 W3C 找到了关于 CORS 的规范。 .阅读后,我的结论是不幸的是,这很简单,不可能做到这一点。看看section 6.2section 7.1 .

我的解决方案

在此特定操作中,我使用的是 JSONP。无需服务器端修改,无需额外代码,不再痛苦!我只需要更改一点我的角度代码。

对此

$http.jsonp('http://localhost:56278/register/appregister?provider=Facebook&?callback=JSON_CALLBACK');

由此
$http({ url: 'http://localhost:56278/register/appregister', method: 'GET', params: { provider: provider } });

预期响应
enter image description here

关于cors - 启用 CORS 的 Web Api 2 facebook 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23171448/

相关文章:

c# - 如何在 Web api 2/app Insights 中生成相关 ID?

c# - 实现 IAuthenticationFilter、工作单元和依赖注入(inject)

302 重定向后的 AJAX 调用将 origin 设置为 null

Javascript - 对预检请求的响应未通过访问控制检查

c# - Web API 中的模型验证 - 在没有 throw 语句的情况下抛出异常?

c# - 从 ASP.NET 操作返回文件时出现 ERR_SPDY_PROTOCOL_ERROR

ajax - 在 Golang 中启用 CORS

javascript - Javascript 会出现 CORS 错误,但 Python/PHP 不会出现 CORS 错误

javascript - AngularJS 应用程序中的 CORS 错误

web-services - RESTful GET 和 POST 的不同模型