josépostiga / jwt-bouncer
Laravel/Lumen 应用程序的 JWT 授权守卫。
Requires
- php: ^7.4
- lcobucci/jwt: ^3.3
Requires (Dev)
- orchestra/testbench: ^5.4
- php-coveralls/php-coveralls: ^2.2
- roave/security-advisories: dev-master
README
安装
您可以通过 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 文件夹中找到。在该文件中,我们将找到两个主要配置选项:guards 和 scopes。
-
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分支始终保持可部署状态。异常情况可能会发生,但它们应该极为罕见。
变更日志
请参阅变更日志以了解最近的变化详情。
贡献
请参阅贡献指南以获取详细信息。
安全
请参阅安全信息以获取详细信息。
鸣谢
许可证
请参阅许可证以获取详细信息。