CSRF 令牌与 Laravel sainttum 和 Angular http 不匹配

laravelAI

1个回答

写回答

Thomas990528

2025-07-09 16:38

+ 关注

Laravel
Laravel

CSRF 令牌与 Laravel Sanctum 和 Angular HTTP 不匹配

CSRF(Cross-Site Request Forgery)是一种常见的网络攻击方式,攻击者通过伪造合法用户的请求,以获取用户的敏感信息或执行恶意操作。为了防止 CSRF 攻击,许多 Web 应用程序使用 CSRF 令牌进行保护。然而,在使用 Laravel Sanctum 和 Angular HTTP 进行开发时,我们可能会遇到 CSRF 令牌与 Laravel Sanctum 和 Angular HTTP 不匹配的问题。

在开发 Web 应用程序时,Laravel Sanctum 是一个流行的身份验证包,用于提供 API 认证。它使用了 CSRF 令牌来防止 CSRF 攻击。Angular HTTP 是 Angular 框架的一个模块,用于进行 HTTP 请求。然而,由于两者的实现方式不同,可能会导致 CSRF 令牌不匹配的问题。

问题分析

在使用 Laravel Sanctum 和 Angular HTTP 进行开发时,我们需要确保 CSRF 令牌的一致性。通常,Laravel Sanctum 会在用户登录后为每个会话生成一个 CSRF 令牌,并将其存储在会话中。当用户进行受保护的请求时,需要将该 CSRF 令牌作为请求头的 "X-XSRF-TOKEN" 字段发送到服务器

然而,Angular HTTP 默认情况下使用的是 "X-XSRF-TOKEN" 字段,而不是 Laravel Sanctum 期望的 "X-CSRF-TOKEN" 字段。这导致了 CSRF 令牌不匹配的问题,因为 Laravel Sanctum 无法识别 Angular HTTP 发送的 "X-XSRF-TOKEN" 字段。

解决方案

为了解决 CSRF 令牌与 Laravel Sanctum 和 Angular HTTP 不匹配的问题,我们可以通过自定义 Angular HTTP 的 XSRF 令牌头部名称来使其与 Laravel Sanctum 一致。

首先,在 Angular 的主模块中,我们需要导入 HttpClientModule 并配置 HttpClientXsrfModule。在 HttpClientXsrfModule 的配置中,我们可以设置自定义的 XSRF 令牌头部名称,如下所示:

typescript

import { HttpClientModule, HttpClientXsrfModule } from '@angular/common/http';

@NgModule({

declarations: [

// ...

],

imports: [

// ...

HttpClientModule,

HttpClientXsrfModule.withOptions({

headerName: 'X-CSRF-TOKEN'

})

],

providers: [],

bootstrap: [AppComponent]

})

export class AppModule { }

通过将 XSRF 令牌头部名称设置为 "X-CSRF-TOKEN",我们使其与 Laravel Sanctum 期望的 CSRF 令牌头部名称一致。

接下来,在进行 HTTP 请求时,我们需要手动添加 XSRF 令牌头部到请求中。我们可以使用 HttpClientpostputpatch 等方法来发送请求,并在请求中设置 XSRF 令牌头部,如下所示:

typescript

import { HttpClient } from '@angular/common/http';

export class ApiService {

constructor(private http: HttpClient) { }

public postData(data: any) {

const headers = { 'Content-Type': 'application/JSon' };

return this.http.post('/api/post', data, { headers, withCredentials: true }).toPromise();

}

}

在上述例子中,我们通过将 headers 对象中添加一个 'X-CSRF-TOKEN' 字段,来手动设置 XSRF 令牌头部。

在使用 Laravel Sanctum 和 Angular HTTP 进行开发时,确保 CSRF 令牌的一致性是至关重要的。通过自定义 Angular HTTP 的 XSRF 令牌头部名称,并手动添加 XSRF 令牌头部到请求中,我们可以解决 CSRF 令牌与 Laravel Sanctum 和 Angular HTTP 不匹配的问题。

通过以上的解决方案,开发人员可以确保应用程序的安全性,并防止 CSRF 攻击的发生。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号