gpt4 book ai didi

javascript - PhoneGap 中的 Cookie header : Refused to set unsafe header "Cookie"

转载 作者:可可西里 更新时间:2023-11-01 02:44:51 28 4
gpt4 key购买 nike

我正在开发一个与安全 .net 服务器通信的 PhoneGap 应用程序。问题是,我似乎无法通过任何请求 ( W3C ) 传递任何 Cookie。

这就是我正在做的(假设“用户名”和“密码”有效)。

var token;    
$.ajax({
url: "https://server.com/AuthService/api/account/login",
crossDomain: true,
type: 'post',
async: false,
data: {
username: "username",
password: "password"
}
}).done(function(response) {
token = response.securityToken;
success = true;
});

此时我有一个身份验证 token ,可用于验证所有后续请求。因此,我使用该 token 向服务器发出另一个请求...

$.ajax({
url: "https://server.com/Service/api/search?query=" + query,
headers: { Cookie: 'auth=' + token },
crossDomain: true,
withCredentials: true,
type: 'POST',
async: false,
data: ' ' //because we don't want our request to be 0 bytes (the server is picky)
}).done(function(data) {
result = data;
});

Chrome 只是说:拒绝设置不安全的 header “Cookie”(符合 W3C 规范)。该应用程序未设置 header ,因此请求 401,因为未发送授权 cookie。

我的问题是:有没有什么方法可以颠覆这个并覆盖 PhoneGap 上的 Cookie header (或完全解决它的其他方法)?我知道使用 Authorization header 也是一种选择,但我对服务器的访问权限有限(不支持它)并且希望有一个更直接的解决方案。

额外的问题:对 AuthService 的调用还应该在设备上设置一个 httpOnly cookie,但没有(我推测这是因为它是跨域请求)...我的这个假设是否正确,或者是否可以服务器端有问题吗?

谢谢!

最佳答案

简短的回答是否定的,您不能设置 Cookie header 。这样做的原因是 Chrome 是您的用户代理,因此 HTTP 规范要求禁止修改具有安全隐患的 header 。

一种解决方案是执行允许服务器在您的 XmlHttpRequest 对象上设置 cookie 的操作。你说你已经在尝试这样做,但它没有用。我怀疑那是因为您需要在您的 ajax 请求中设置 withCredentials。添加 xhrFields 属性,如下所示。

var token;    
$.ajax({
url: "https://server.com/AuthService/api/account/login",
crossDomain: true,
xhrFields: {withCredentials: true},
type: 'post',
async: false,
data: {
username: "username",
password: "password"
}
}).done(function(response) {
token = response.securityToken;
success = true;
});

现在,只要响应服务器不发送通配符作为其 CORS 允许域 (Access-Control-Allow-Origin),您就应该收到 cookie。

关于javascript - PhoneGap 中的 Cookie header : Refused to set unsafe header "Cookie",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17847283/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com