현재 Angular4 앱에서 작업 중입니다. 이제 XSRF 보호를 구현하려고합니다. 응답 헤더 쿠키에서 "XSRF-TOKEN"이 표시되고 다음 요청 헤더 쿠키에 "X-XSRF-TOKEN"을 보내야합니다. official Angular document에서 언급했듯이 Angular가이를 처리하고 있습니다. 그러나 제 경우에는 각도가 그것을 다루지 않습니다. 그래서 응답 헤더와 함께 "X-XSRF-TOKEN"을 첨부하기 위해 다음과 같은 사용자 지정 XsrfInterceptor를 만들었습니다. angular_4에서 응답 헤더와 함께 "X-CSRF-TOKEN"을 보내는 방법
import { NgModule, Injectable } from '@angular/core';
import { Observable } from "rxjs/Observable";
import { HttpRequest, HttpHandler, HttpEvent, HttpXsrfTokenExtractor, HttpInterceptor } from "@angular/common/http";
@Injectable()
export class XsrfInterceptor implements HttpInterceptor {
constructor(private tokenExtractor: HttpXsrfTokenExtractor) {
}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const headerName = 'X-XSRF-TOKEN';
console.log("xsrf intercepter called");
let requestToForward = req;
let token = this.tokenExtractor.getToken() as string;
console.log(token);
if (token !== null) {
requestToForward = req.clone({ setHeaders: {headerName: token } });
}
return next.handle(requestToForward);
}
}
그리고 내 주요 모듈
, 나는, 제공에providers: [
LoginService,
AuthGuardLogin,
{ provide: HTTP_INTERCEPTORS, useClass: XsrfInterceptor, multi: true }
],
그것을 포함하지만 unfortunatley 작동하지 않습니다. 내 aopplication 사용자 정의 Intercepter (그것은 console.log ('xsrf intercepter called')를 인쇄하지 않습니다)의 요격 방법을 호출하지 않는 것 같아요.
내 HTTP 헤더는 다음과 같습니다 : 응답 헤더에서
let httpHeader = new RequestOptions({
headers: new Headers({
'Content-Type': 'application/json',
'x-auth-token': this.authToken
})
})
:
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:Access-Control-Allow-Origin, Access-Control-Allow-Headers, Accept, X-XSRF-TOKEN, XSRF-TOKEN, X-Requested-By, Content-Type, Origin, Authorization, X-Requested-With, x-auth-token, OPTIONS
Access-Control-Allow-Methods:POST, GET, PUT, OPTIONS
Access-Control-Allow-Origin:http://localhost:7070
Access-Control-Expose-Headers:x-auth-token, XSRF-TOKEN, X-XSRF-TOKEN
Access-Control-Max-Age:3600
Cache-Control:no-cache, no-store, max-age=0, must-revalidate
Date:Fri, 24 Nov 2017 06:42:20 GMT
Expires:0
Pragma:no-cache
Referrer-Policy:same-origin
Set-Cookie:XSRF-TOKEN=63f66e2a-1ad0-4641-8f36-27c16734a676;path=/mfleet;HttpOnly
Transfer-Encoding:chunked
x-auth-token:8d06b1da-c35b-42ea-ac28-eae51f3dd74d
X-Content-Type-Options:nosniff
X-Frame-Options:DENY
X-XSS-Protection:1; mode=block
다음 요청 헤더 : 나는 각 라이브러리의 버전이 다음 사용하고
Accept:application/json, text/plain, */*
Accept-Encoding:gzip, deflate, br
Accept-Language:en-US,en;q=0.9
Connection:keep-alive
Content-Type:application/json
Cookie:XSRF-TOKEN=63f66e2a-1ad0-4641-8f36-27c16734a676 **//this should be X-XSRF-TOKEN**
Host:localhost:7070
Referer:http://localhost:7070/dist/
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36
x-auth-token:8d06b1da-c35b-42ea-ac28-eae51f3dd74d
:
"@angular/animations": "^4.4.5",
"@angular/cdk": "^2.0.0-beta.8",
"@angular/common": "^4.0.0",
"@angular/compiler": "^4.0.0",
"@angular/core": "^4.0.0",
"@angular/forms": "^4.0.0",
"@angular/http": "4.0.0",
"@angular/material": "^2.0.0-beta.8",
"@angular/platform-browser": "^4.0.0",
"@angular/platform-browser-dynamic": "^4.0.0",
"@angular/router": "^4.0.0",
도움 주셔서 감사합니다. 나는 당신의 제안에 따라 구현했습니다. 하지만 작동하지 않습니다. 다음 코드를 확인하고 누락 된 부분을 수정하십시오. "각도/CDK @" "4.4.5" : "^ 2.0.0-beta.8" "각도/공통 @": "4.3.0" "각도/애니메이션 @" "@ angular/form": "4.3.0", "@ angular/core": "4.3.0", "@ 각도/형식": "4.3.0", " 4.3.0 ", "@ angular/material ":"^ 2.0.0-beta.8 ", "@ angle/platform-browser ":"4.3.0 ", "@ angular/platform-browser-dynamic ":"4.3.0 " "각도/라우터 @ ":"4.3.0 " –
수입 : // 다른 모듈 ... HttpClientXsrfModule.withOptions ({ cookieName 'XSRF 토큰' headerName : 'X-XSRF-TOKEN' } ] –
새 모듈 HttpClientModule을 사용하여 https를 사용하고 있습니까? 인터셉터는이 모듈에만 사용됩니다. –