【发布时间】:2021-02-19 00:07:57
【问题描述】:
我在域 A 上有 spa,在域 B 上有一个 Laravel 服务器,我想使用 sanctum,但 cookie 只在相同的域中工作,所以你建议有什么办法解决这个问题?而且我不想在 sanctum 上使用令牌库 AUTH
【问题讨论】:
标签: laravel cookies single-page-application laravel-sanctum
我在域 A 上有 spa,在域 B 上有一个 Laravel 服务器,我想使用 sanctum,但 cookie 只在相同的域中工作,所以你建议有什么办法解决这个问题?而且我不想在 sanctum 上使用令牌库 AUTH
【问题讨论】:
标签: laravel cookies single-page-application laravel-sanctum
不,没有办法绕过使用跨站点 cookie。这是一项安全功能。您必须实施自己的身份验证或使用相同的 TLD。
【讨论】:
是的,您可以使用授权代替 cookie
Laravel Sanctum 通过将用户 API 令牌存储在单个数据库表中并通过应该包含有效 API 令牌的 Authorization 标头验证传入的 HTTP 请求来提供此功能。
但是使用 cookie 是不可能的并且不可扩展,因为会话存储在单个服务器中。如果您使用多个服务器。
例子:
如果您在服务器 1 中使用相同的 cookie 并且服务器 2 中的会话不知道服务器 2 意味着您是无效用户时将会话存储在服务器 1 中,我将使用服务器 1 和服务器 2。
所以我的建议是使用 JWT 或 sanctum 令牌代替 cookie。 只需使用
$user->createToken($request->device_name)->plainTextToken;
上述代码生成令牌并存储在数据库中,您只需将相同的令牌发送给客户端进行验证。
验证只需使用
Authorization: Bearer <token>
你的路由守卫会自动检查令牌
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
});
【讨论】: