首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >CORS:凭据模式为'include‘

CORS:凭据模式为'include‘
EN

Stack Overflow用户
提问于 2017-03-15 15:23:02
回答 5查看 183.4K关注 0票数 123

是的,我知道你在想什么-又是一个CORS问题,但这一次我被难住了。

因此,首先,实际的错误消息如下:

XMLHttpRequest无法加载http://localhost/Foo.API/token。当请求的凭据模式为'include'时,响应中的'Access-Control-Allow-Origin‘标头的值不能是通配符'*’。因此不允许访问源'http://localhost:5000‘。由withCredentials属性控制XMLHttpRequest发起的请求的凭据模式。

我不确定凭据模式是什么意思是“包含”

因此,当我在postman中执行请求时,我遇到了这样的错误:no

但是当我通过我的angularjs web应用程序访问相同的请求时,我被这个错误难住了。这是我的angualrjs请求/响应。正如您将看到的,响应是OK 200,但我仍然收到CORS错误:

Fiddler请求和响应:

下图演示了从web前端到API的请求和响应

因此,根据我在网上读到的所有其他帖子,似乎我在做正确的事情,这就是为什么我不能理解这个错误。最后,下面是我在angualrjs (登录工厂)中使用的代码:

API中的CORS实现-参考目的:

使用的方法1:

代码语言:javascript
复制
public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        EnableCrossSiteRequests(config);
    }

    private static void EnableCrossSiteRequests(HttpConfiguration config)
    {
        var cors = new EnableCorsAttribute("*", "*", "*")
        {
            SupportsCredentials = true
        };
        config.EnableCors(cors);
    }
}

使用的方法2:

代码语言:javascript
复制
public void Configuration(IAppBuilder app)
{
    HttpConfiguration config = new HttpConfiguration();

    ConfigureOAuth(app);

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

}

首先要感谢大家!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-08-17 06:32:31

这个问题源于你的Angular代码:

withCredentials设置为true时,它会尝试将凭据或cookies与请求一起发送。由于这意味着另一个源可能正在尝试执行经过身份验证的请求,因此不允许使用通配符("*")作为"Access-Control-Allow- origin“标头。

您必须在"Access-Control-Allow- origin“头中显式地响应发出请求的源,才能使其工作。

我建议明确地将您希望允许进行身份验证请求的来源列入白名单,因为简单地使用请求来源进行响应意味着,如果用户碰巧有一个有效的会话,任何给定的网站都可以对您的后端进行身份验证调用。

我用我前段时间写的this article解释了这些东西。

因此,您可以将withCredentials设置为false或实现源白名单,并在涉及凭据时使用有效的源来响应CORS请求

票数 132
EN

Stack Overflow用户

发布于 2019-04-08 12:28:13

如果您正在使用CORS中间件,并且您想要发送withCredentials布尔值true,您可以这样配置CORS:

代码语言:javascript
复制
var cors = require('cors');    
app.use(cors({credentials: true, origin: 'http://localhost:5000'}));

`

票数 24
EN

Stack Overflow用户

发布于 2018-05-11 04:40:35

为Angular 5和Spring Security定制CORS (基于Cookie的解决方案)

在需要为Cookie传输添加选项标志withCredentials: true的角度侧:

代码语言:javascript
复制
constructor(public http: HttpClient) {
}

public get(url: string = ''): Observable<any> {
    return this.http.get(url, { withCredentials: true });
}

在Java服务器端,需要为配置CORS策略添加CorsConfigurationSource

代码语言:javascript
复制
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Bean
    CorsConfigurationSource corsConfigurationSource() {
        CorsConfiguration configuration = new CorsConfiguration();
        // This Origin header you can see that in Network tab
        configuration.setAllowedOrigins(Arrays.asList("http:/url_1", "http:/url_2")); 
        configuration.setAllowedMethods(Arrays.asList("GET","POST"));
        configuration.setAllowedHeaders(Arrays.asList("content-type"));
        configuration.setAllowCredentials(true);
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors().and()...
    }
}

缺省情况下,方法configure(HttpSecurity http)将对http.cors()使用corsConfigurationSource

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42803394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档