获取 Set-Cookie header 设置 CSRF Cookie 时避免 HTTP 403 错误的最佳方法
Best way to avoid HTTP 403 error when getting Set-Cookie header to set CSRF Cookie
我正在调用具有 CSRF 保护的 REST API。
一切正常。我正在获取令牌并将其发送回服务器。
但是,当我执行第一个请求时或浏览器中未设置 CSRF Cookie 时,它总是会抛出 HTTP 403
错误。
这是因为我没有发送回 CSRF
令牌,因为这是服务器发送 Set-Cookie
header 以设置 CSRF Cookie 的第一个请求。
第一次向 CSRF-protected API 发送请求时避免此错误的最佳方法是什么?
在发送任何请求之前,我是否应该每次都检查浏览器中是否设置了 CSRF
Cookie?
你可以这样做。这是一个虚拟脚本。
checkIfAuthenticated()
.then( token => {
// user is authorized. use token
})
.catch( err => {
// oops. not authorized probably. authenticate user here.
});
// and your checkifAuthenticated:
function checkifAuthenticated() {
return new Promise((resovle, reject) => {
// perform a http request here to /api?checkauth
if(api_returned_401) {
reject('not authenticated');
} else {
resolve(tokenOrInfo);
}
});
}
我正在调用具有 CSRF 保护的 REST API。
一切正常。我正在获取令牌并将其发送回服务器。
但是,当我执行第一个请求时或浏览器中未设置 CSRF Cookie 时,它总是会抛出 HTTP 403
错误。
这是因为我没有发送回 CSRF
令牌,因为这是服务器发送 Set-Cookie
header 以设置 CSRF Cookie 的第一个请求。
第一次向 CSRF-protected API 发送请求时避免此错误的最佳方法是什么?
在发送任何请求之前,我是否应该每次都检查浏览器中是否设置了 CSRF
Cookie?
你可以这样做。这是一个虚拟脚本。
checkIfAuthenticated()
.then( token => {
// user is authorized. use token
})
.catch( err => {
// oops. not authorized probably. authenticate user here.
});
// and your checkifAuthenticated:
function checkifAuthenticated() {
return new Promise((resovle, reject) => {
// perform a http request here to /api?checkauth
if(api_returned_401) {
reject('not authenticated');
} else {
resolve(tokenOrInfo);
}
});
}