
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 令牌头部名称,如下所示:typescriptimport { 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 令牌头部到请求中。我们可以使用 HttpClient 的 post、put、patch 等方法来发送请求,并在请求中设置 XSRF 令牌头部,如下所示:typescriptimport { 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 攻击的发生。Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号