Trong tài liệu góc, được đề cập rằng góc httpclient
sẽ tự động gửi giá trị của cookie XSRF-TOKEN
trong tiêu đề X-XSRF-TOKEN
của yêu cầu bài đăng. Documentation linkangular4 httpclient csrf không gửi x-xsrf-token
Nhưng nó không gửi tiêu đề cho tôi. Đây là mã của tôi
Nodejs mã để thiết lập cookie
router.get('/set-csrf',function(req,res,next){
res.setHeader('Set-Cookie', "XSRF-TOKEN=abc;Path=/; HttpOnly; SameSite=Strict");
res.send();
})
Tôi đã sử dụng các httpclient trong app.module.ts
imports: [
HttpClientModule
]
** Đoạn mã trên chỉ dành cho debug mục đích. Tôi không có điểm cuối tập hợp csrf.
Nhưng nó không gửi bất kỳ tiêu đề nào khi tôi gửi yêu cầu bài đăng. Tôi không thể gỡ lỗi.
Tôi cũng đã thêm sự cố trong kho lưu trữ github của góc cạnh. HttpXsrfInterceptor sẽ kiểm tra nếu yêu cầu là GET hoặc HEAD, hoặc nếu nó bắt đầu bằng http. Nếu đúng, nó bỏ qua thêm tiêu đề.
Đây là mã trong HttpXsrfInterceptor class
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const lcUrl = req.url.toLowerCase();
// Skip both non-mutating requests and absolute URLs.
// Non-mutating requests don't require a token, and absolute URLs require special handling
// anyway as the cookie set
// on our origin is not the same as the token expected by another origin.
if (req.method === 'GET' || req.method === 'HEAD' || lcUrl.startsWith('http://') ||
lcUrl.startsWith('https://')) {
return next.handle(req);
}
const token = this.tokenService.getToken();
// Be careful not to overwrite an existing header of the same name.
if (token !== null && !req.headers.has(this.headerName)) {
req = req.clone({headers: req.headers.set(this.headerName, token)});
}
return next.handle(req);
}
Tôi không chắc chắn lý do tại sao họ đã bỏ qua cho http/s phần. Đây là số issue in github
Bạn có sử dụng yêu cầu CORS không? – Alexandr
Tôi đang thêm tiêu đề '" Access-Control-Allow-Headers "," * "' – netuser
Tôi đã thấy sự cố của bạn. Dường như với tôi rằng góc nên xử lý các liên kết http theo cách khác nhau. Ví dụ: lưu trữ mã thông báo csrf cuối cùng cho mỗi tên miền riêng biệt. Có lẽ nó là tốt để làm cho một tời Interceptor xử lý csrf theo cách như vậy? – Alexandr