我已经阅读了关于SO 的文档和所有相关问题,但是Angular的XSRF机制仍然不适合我:我绝不能自动附加X-XSRF-TOKEN标头发出POST请求.
我有一个带登录表单的Angular 6应用程序.
它是Symfony(PHP 7.1)网站的一部分,Angular应用程序页面,当从Symfony提供时,发送正确的Cookie(XSRF-TOKEN):
我的app.module.ts包含正确的模块:
// other imports...
import {HttpClientModule, HttpClientXsrfModule} from "@angular/common/http";
// ...
@NgModule({
declarations: [
// ...
],
imports: [
NgbModule.forRoot(),
BrowserModule,
// ...
HttpClientModule,
HttpClientXsrfModule.withOptions({
cookieName: 'XSRF-TOKEN',
headerName: 'X-CSRF-TOKEN'
}),
// other imports
],
providers: [],
entryComponents: [WarningDialog],
bootstrap: [AppComponent]
})
export class AppModule {
}
Run Code Online (Sandbox Code Playgroud)
然后,在Service的方法中,我正在进行以下http请求(this.http是一个实例HttpClient):
this.http
.post<any>('api/login', {'_username': username, '_pass': password})
.subscribe(/* handler here */);
Run Code Online (Sandbox Code Playgroud)
post请求永远不会发送X-XSRF-TOKEN标头.为什么?
我正在尝试通过绝对URL向Spring(基本身份验证)安全的Rest API 发出POST请求。
阅读了Angular省略了将X-XSRF-TOKEN自动插入到请求标头中以获取绝对URL的信息后,我尝试实现HttpInterceptor来添加令牌。
在我的原始/ signin POST请求中,我创建了必要的授权:基本标头,以确保Spring对请求进行身份验证。
返回的响应标头包含预期的set-cookie令牌:
Set-Cookie:XSRF-TOKEN=4e4a087b-4184-43de-81b0-e37ef953d755; Path=/
但是,在我的自定义拦截器类中,当我尝试从注入的HttpXsrfTokenExtractor中获取下一个请求的令牌时,它返回null。
这是我的拦截器类的代码:
import {Injectable, Inject} from '@angular/core';
import { Observable } from 'rxjs/Rx';
import {HttpInterceptor, HttpXsrfTokenExtractor, HttpRequest, HttpHandler,
HttpEvent} from '@angular/common/http';
@Injectable()
export class HttpXsrfInterceptor implements HttpInterceptor {
constructor(private tokenExtractor: HttpXsrfTokenExtractor) {}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
let requestMethod: string = req.method;
requestMethod = requestMethod.toLowerCase();
if (requestMethod && (requestMethod === 'post' || requestMethod === …Run Code Online (Sandbox Code Playgroud) csrf spring-security webpack-dev-server x-xsrf-token angular5
Iam现在迷路了,需要一些帮助。
我有一个
并希望启用CSRF保护,因为默认情况下都应启用CSRF保护(文档说):不是!
在SpringBoot上,我需要添加以下安全配置:
http
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
Run Code Online (Sandbox Code Playgroud)
在Angular上,我需要添加以下模块:
imports: [
...,
HttpClientModule,
HttpClientXsrfModule, //(!)
...
Run Code Online (Sandbox Code Playgroud)
服务器的底线是在每个响应中发送XRSF-TOKEN。
-但每个人都有不同。那是对的吗?我希望在客户端会话中也一样。
-这里的主要问题是Angular5仍未在其帖子调用中使用XRSF-TOKEN(例如)。它没有在请求中设置X-XSRF-TOKEN。
我在做什么错还是想念?