Javascript CORS:凭证模式为';包括';
是的,我知道你在想什么——这是CORS的另一个问题,但这次我被难住了 因此,首先,实际的错误消息: 无法加载XMLHttpRequest。这个 响应中“Access Control Allow Origin”标头的值必须为 当请求的凭据模式为 “包括”。因此,不允许使用源“” 通道由发起的请求的凭据模式 XMLHttpRequest由withCredentials属性控制 我不确定凭证模式的意思是“包括”吗 因此,当我在postman中执行请求时,我遇到了否这样的错误: 但是当我通过angularjs web应用程序访问相同的请求时,我被这个错误难住了。这是我的angualrjs请求/响应。正如您将看到的,响应是Javascript CORS:凭证模式为';包括';,javascript,c#,angularjs,cors,asp.net-web-api2,Javascript,C#,Angularjs,Cors,Asp.net Web Api2,是的,我知道你在想什么——这是CORS的另一个问题,但这次我被难住了 因此,首先,实际的错误消息: 无法加载XMLHttpRequest。这个 响应中“Access Control Allow Origin”标头的值必须为 当请求的凭据模式为 “包括”。因此,不允许使用源“” 通道由发起的请求的凭据模式 XMLHttpRequest由withCredentials属性控制 我不确定凭证模式的意思是“包括”吗 因此,当我在postman中执行请求时,我遇到了否这样的错误: 但是当我通过angul
OK 200
,但我仍然收到CORS错误:
小提琴手请求和响应:
下图演示了从web前端到API的请求和响应
因此,根据我在网上读到的所有其他帖子,我似乎做了正确的事情,这就是为什么我不能理解错误。最后,这里是我在angualrjs(登录工厂)中使用的代码:
API中的CORS实施-参考目的:
使用的方法1:
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:
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
ConfigureOAuth(app);
WebApiConfig.Register(config);
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
app.UseWebApi(config);
}
非常感谢 问题源于您的角度代码: 当
withCredentials
设置为true时,它将尝试随请求发送凭据或cookie。因为这意味着另一个源站可能正在尝试执行经过身份验证的请求,所以不允许将通配符(*)作为“访问控制允许源站”头
您必须在“Access Control Allow origin”(访问控制允许来源)标题中显式地使用发出请求的来源进行响应,以使其工作
我建议明确列出您希望允许发出经过身份验证的请求的来源,因为只要使用来自请求的来源进行响应,就意味着如果用户碰巧拥有有效会话,任何给定网站都可以向您的后端发出经过身份验证的呼叫
我在一段时间前写的文章中解释了这件事
因此,您可以将
withCredentials
设置为false,或者实现一个源白名单,并在涉及凭据时使用有效的源响应CORS请求为Angular 5和Spring Security定制CORS(基于Cookie的解决方案)
在角度侧,需要为Cookie传输添加选项标志withCredentials:true
:
constructor(public http: HttpClient) {
}
public get(url: string = ''): Observable<any> {
return this.http.get(url, { withCredentials: true });
}
方法
configure(HttpSecurity http)
默认情况下将使用corsConfigurationSource
用于http.cors()
如果有帮助,我在我的reactjs应用程序中使用离心机,
在检查了下面的一些注释后,我查看了离心机.js库文件,在我的版本中,该文件包含以下代码片段:
if ('withCredentials' in xhr) {
xhr.withCredentials = true;
}
在我删除了这三行之后,应用程序工作得很好,正如预期的那样
希望有帮助 如果您正在使用CORS中间件,并且希望发送带有凭据的
布尔值true,则可以如下配置CORS:
var-cors=require('cors');
使用(cors({凭证:true,来源:'http://localhost:5000'}));代码>如果您使用的是.NET Core,则在Startup.CS中配置CORS时必须使用.AllowCredentials()
配置服务内部
services.AddCors(o => {
o.AddPolicy("AllowSetOrigins", options =>
{
options.WithOrigins("https://localhost:xxxx");
options.AllowAnyHeader();
options.AllowAnyMethod();
options.AllowCredentials();
});
});
services.AddMvc();
然后在配置的内部:
app.UseCors("AllowSetOrigins");
app.UseMvc(routes =>
{
// Routing code here
});
对我来说,就是缺少options.AllowCredentials()导致了您提到的错误。一般来说,对于其他有CORS问题的人来说,作为一个旁注,order matters和AddCors()必须在您的Startup类中的AddMVC()之前注册。只需添加Axios.defaults.withCredentials=true
,而不是客户端中的({credentials:true}
),
并将app.use(cors())
更改为
app.use(cors(
{origin: ['your client side server'],
methods: ['GET', 'POST'],
credentials:true,
}
))
好照片,它们是什么的?为了回答您的问题,如果您包括身份验证,则访问控制允许源站响应必须是源站(浏览器页面)主机,它不能是*
-因此,服务器端的CORS错误-哦,邮递员工作,因为它不是跨源站request@JaromandaX,谢谢你的回复。这些图片展示了请求/响应以及传递的标题。你问这个问题,显然表明它没有实现它的目标…我的评论应该是你需要知道的全部-不需要看到图片。因此,最近我决定不再使用web api上的cookie,而是使用令牌。当我使用cookies时,我的CORS工作没有任何问题。因此,我很难理解CORS是如何在服务器端正确实现的。如果包括身份验证,则访问控制允许源
响应必须是源(浏览器页面)主机,不能是*
我正在使用TypeScript处理Angular 5应用程序。我需要将withCredentials设置为true,否则我将获得授权失败异常。如何使用凭据解决此问题:true@Ziggler我也有同样的情况。你找到解决方案了吗?@Ziggler我想知道我的答案。当使用WithCredentials=TRUE和Access Control Allow Origin=['时,我仍然会遇到此错误,并且我没有使用star*所以错误消息不再有意义。错误消息:"对飞行前请求的响应未通过访问控制检查:当请求的凭据模式为“包括”时,响应中“访问控制允许来源”标头的值不得为通配符*。因此,不允许访问来源“”。由XMLHttpRequest启动的请求的凭据模式由withCred控制entials属性。“@mruanova您确定在请求中正确设置了Access Control Allow Origin标头吗?听起来好像在某处发送了带有通配符的内容
app.use(cors(
{origin: ['your client side server'],
methods: ['GET', 'POST'],
credentials:true,
}
))