WEB API AngularJS Google+Login CORS 不允许

Posted

技术标签:

【中文标题】WEB API AngularJS Google+Login CORS 不允许【英文标题】:WEB API AngularJS Google+Login CORS not allowed 【发布时间】:2014-04-21 13:55:03 【问题描述】:

我目前正在使用 WEB API 2 和 AngularJS。 (livermorium:1234 = 我的 web api 是从哪里运行的。) 我只是想使用 Google+ 和 Facebook-Login,但我无法授予对 http:www.google.de 等外部 URL 的访问权限以进行身份​​验证。

这是我的 angularJS 请求:

$http.get('http://Livermorium:1234/api/Account/ExternalLogins?returnUrl=/&generateState=true')
        .success(function (data, status, headers, config) 
            $http.get('https://www.google.de')
                .success(function (data) 
                    $log.log('-- successfull Google retrievement');
                    $log.log(data);
        )
)

在我的 WEB API“WebApiConfig.cs”中,我什至允许启用每个 url cors:

public static void Register(HttpConfiguration config)
    
        // Web API configuration and services
        // Configure Web API to use only bearer token authentication.
        config.SuppressDefaultHostAuthentication();
        config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

        var cors = new EnableCorsAttribute("*", "*", "*");
        config.EnableCors(cors);
        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/controller/id",
            defaults: new  id = RouteParameter.Optional 
        );
    

但它一直告诉我:

XMLHttpRequest cannot load https://www.google.de/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://livermorium:1234' is therefore not allowed access. 

我什至在我的 webconfig 中添加了 customHeaders。没有成功。

<system.webServer>
<handlers>
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <remove name="OPTIONSVerbHandler" />
  <remove name="TRACEVerbHandler" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS, PUT, DELETE" />
    <add name="Access-Control-Allow-Headers" value="*" />
  </customHeaders>
</httpProtocol>

有没有人知道为什么我的请求一直被拒绝?

【问题讨论】:

试试这个? ***.com/questions/17756550/angularjs-cors-issues 已经尝试添加 '$httpProvider.defaults.useXDomain = true;和/或删除 $httpProvider.defaults.headers.common['X-Requested-With'];'到我的应用程序配置没有成功。我很绝望我还能做些什么来解决它。 你为什么要对https://www.google.de 进行 HTTP GET 请求?这不是您进行 Google+ 登录的方式。也许它应该是一个重定向? BTW CORS 标头设置在目标服务器(又名 Google)上,而不是您运行网站的服务器上。 【参考方案1】:

我也在使用 owin 中间件。所以我不得不做一些改变: “WebApiConfig.cs”旧:

var cors = new EnableCorsAttribute("*", "*", "*");
    config.EnableCors(cors);

“WebApiConfig.cs”新:

config.EnableCors();

“startup.cs”我添加了这一行:

app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);

所以它看起来像这样:

public void Configuration(IAppBuilder app)
    
        HttpConfiguration config = new HttpConfiguration();

        ConfigureOAuth(app);

        WebApiConfig.Register(config);
        app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
        app.UseWebApi(config);

    

资源:http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/

非常感谢

【讨论】:

【参考方案2】:

如果您设置了 config.EnableCors(cors) 则不需要 web.config 中的 customHeader。

从您的 web.config 中删除 all'customHeader。

<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS, PUT, DELETE" />
<add name="Access-Control-Allow-Headers" value="*" />

我遇到了同样的问题,我用这种方法解决了。

【讨论】:

以上是关于WEB API AngularJS Google+Login CORS 不允许的主要内容,如果未能解决你的问题,请参考以下文章

Angularjs - ng-map - Google Maps Javascript API v3 - 如何为多个标记设置最佳缩放

使用 Firebase Auth 访问 Google Calendar API

Web API 和 AngularJs

[angularjs] MVC + Web API + AngularJs 搭建简单的 CURD 框架

AngularJS Web Api AntiForgeryToken CSRF

使用AngularJS查询Web API