josépostiga/jwt-bouncer

Laravel/Lumen 应用程序的 JWT 授权守卫。

v1.0.5 2020-09-06 23:24 UTC

This package is auto-updated.

Last update: 2024-09-07 17:17:32 UTC


README

Latest Version on Packagist Run tests Coverage Status Total Downloads

安装

您可以通过 composer 安装此包。

composer require josepostiga/jwt-bouncer

如果您使用的是最新的 Laravel 安装,此包将自动由框架发现和连接。

Lumen 应用程序上,我们需要手动添加 JosePostiga\JwtBouncer\JwtServiceProvider

用法

JWT 身份验证守卫

此包向框架配置中添加了一个 jwt API 守卫。您可以在每个路由的基础上显式选择此守卫,或者在 config/auth.php 配置文件中将默认 API 守卫驱动程序更改为 jwt

JWT 范围

此包将验证传入请求的 JWT 上的 scopes 声明,并检查配置的范围是否包含在该声明中。如果没有,或者声明不存在,请求将立即被拒绝,并返回 401 未授权 错误状态码。如果 JWT 无法正确解码,也会发生相同的拒绝。

配置

如果我们使用 Laravel,我们可以通过运行 php artisan vendor:publish --tag=config 来发布包的配置文件。一个新的 jwt-bouncer.php 配置文件将可在框架的 config 文件夹中找到。在该文件中,我们将找到两个主要配置选项:guardsscopes

  • guards 选项包含合并到 config/auth.php 中默认 guards 键所需的必要结构,该键包含框架可以使用的身份验证守卫。如果我们需要重命名包应引用的驱动程序键,我们就在这里做。

  • scopes 键包含一个数组,该数组包含守卫将验证每个请求解码的 JWT 上的预定义范围。我们可以添加任意多个。提示:如果我们想接受所有范围,我们就可以在这里添加 * 范围,这意味着所有范围都被接受。

如果我们使用 Lumen,那么事情会变得有点复杂。我们需要在 .env 文件中添加一个 JWT_SCOPES 键,其中我们定义了我们接受的所有范围,并用逗号分隔。我们还需要在 bootstrap/app.php 文件中添加 auth 配置文件加载调用,通过在配置文件加载部分添加 $app->configure('auth')

保护路由

执行配置步骤后,我们可以在任何路由或路由组上调用 auth:jwt 中间件,以使用此包的守卫。

Authenticatable 用户实例

在一般的 Laravel 应用程序中,我们可以通过 Auth::user()request->user() 访问已验证用户实例。这个实例通常是 Eloquent 模型的一个实例,或者在某些情况下是类似用户数据库表的资源。

当我们使用此包的 JWT 守卫时,我们也将访问已验证用户,但它不会是之前描述的类型之一。它将是 AuthenticatedUser 值对象的实例。这个类实现了 Authenticatable 接口,但它的数据源是 JWT 本身。

这意味着调用 Auth::user()->id() 将返回 JWT 的 sub 声明的值。如果我们想访问 JWT 中的任何其他声明,我们只需要通过其键名引用它,所以如果我们有一个 name 声明,我们可以通过 Auth::user()->name 来访问它。所有属性访问的调用都将路由到 JWT 的声明。

测试

本项目已全面测试。我们建立了一个自动流水线和一个自动代码质量分析工具集,用于持续测试和确保本存储库发布的所有代码的质量,但您也可以通过运行以下命令自行执行测试套件:

vendor/bin/phpunit

我们的目标是确保master分支始终保持可部署状态。异常情况可能会发生,但它们应该极为罕见。

变更日志

请参阅变更日志以了解最近的变化详情。

贡献

请参阅贡献指南以获取详细信息。

安全

请参阅安全信息以获取详细信息。

鸣谢

许可证

请参阅许可证以获取详细信息。