Passport 是否利用守卫不验证用户,而是验证需要访问令牌的路线上的访问令牌?

时间:2021-02-09 02:49:02

标签: laravel oauth-2.0 laravel-7 laravel-passport laravel-authentication

我对 the documentation 有点困惑。据说:

<块引用>

Passport 包含一个身份验证保护,用于验证访问 传入请求的 令牌。一旦您将 api 防护配置为 使用passport driver,只需要指定auth:api 任何需要有效访问令牌的路由上的中间件

所以这意味着 Passport 使用警卫不是为了验证用户,而是在需要这些令牌的路线上验证访问令牌。我做对了吗?

1 个答案:

答案 0 :(得分:0)

在这种情况下,验证访问令牌就是对用户进行身份验证。为了理解为什么会这样,让我们​​通过一个使用 JWT 的简化身份验证流程(让我们暂时忽略 oAuth2)。

  1. 用户正在登录网站。这会触发 POST /login 请求,请求正文中包含 usernamepassword
  2. 后端验证用户凭据。如果凭据有效,它将发出 JWT,它将充当访问令牌。 JWT 负载将包含一些允许后端识别用户的数据,例如。 G。用户标识。然后使用只有后端知道的秘密对 JWT 进行签名。
  3. 后端会将访问令牌返回给客户端,客户端必须在对服务器的任何后续请求中包含访问令牌。通常,客户端会在 Authorization 标头中提供令牌。
  4. 在处理来自客户端的下一个请求时,后端将从 Authorization 标头中提取访问令牌并检查其签名。如果签名有效,后端可以确定令牌数据没有被操纵,例如。 G。通过更改访问令牌上的用户 ID。使用有效签名,后端可以从令牌负载中提取用户 ID,并将该特定 ID 的 User 模型设置为经过身份验证。如果签名无效,后端可能会返回类似 401 Unauthorized 的内容。
相关问题