【发布时间】:2019-12-19 02:23:34
【问题描述】:
我用 Angular 编写了一个登录屏幕。我希望能够登录到我的 Spring Boot 服务。如果没有 csrf 令牌,我将无法登录。 我是否应该为了获取 csrf 令牌而对 Spring Boot 服务进行不必要的调用?
【问题讨论】:
标签: angular spring-boot spring-security
我用 Angular 编写了一个登录屏幕。我希望能够登录到我的 Spring Boot 服务。如果没有 csrf 令牌,我将无法登录。 我是否应该为了获取 csrf 令牌而对 Spring Boot 服务进行不必要的调用?
【问题讨论】:
标签: angular spring-boot spring-security
csrf 登录 api 不需要令牌。您必须在您的登录 API 中排除它。
登录成功后,您必须在响应中发送令牌,以便您的 Angular 应用程序将此令牌保存在 cookie 中。
从下一个 api 开始,客户端应用程序必须在令牌中发送这个 csrf 令牌,以确保有正确的身份验证。
在angular应用的cookies中写入csrftoken后,就可以用傻逼的方式提取token了。
将 HttpClientXsrfModule 导入您的 app.module.ts
<!-- app.module.ts -->
import { HttpClientModule, HttpClientXsrfModule } from '@angular/common/http';
imports:[...,HttpClientXsrfModule,...]
将HttpXsrfTokenExtractor 注入您的服务或HttpInterceptor 或您要在其中使用cookie 的文件。
constructor(private cookieExtractor:HttpXsrfTokenExtractor){}
获取cookie,例如xsrf token
const xsrf: string = this.cookieExtractor.getToken();
在标题中添加令牌
if (xsrf) {
request = request.clone({ headers: request.headers.set('x-xsrf-token', xsrf) });
}
【讨论】: