如何使用 jwt-auth 在 Laravel 中正确设置 JWT 机密?

Posted

技术标签:

【中文标题】如何使用 jwt-auth 在 Laravel 中正确设置 JWT 机密?【英文标题】:How to correctly set a JWT secret in Laravel with jwt-auth? 【发布时间】:2017-06-05 07:30:08 【问题描述】:

我想在我的项目中测试 JWT 的身份验证,因为 JWT 将从应用程序外部发送,因此必须使用我的应用程序中的密钥对其进行签名。这可能吗?有谁知道允许您使用秘密签署令牌的网站?

我尝试了http://jwtbuilder.jamiekurtz.com/,但如果我输入由jwt:generate 返回的密钥,JWT-auth 会不断返回"error":"token_invalid"。这让我相信此命令返回的密钥实际上并不是我的应用程序中用于签署 JWT 的密钥。

我正在使用php artisan jwt:generate 生成一个密钥,它返回以下内容:

jwt-auth secret [...] set successfully.

但它在哪里设置?我的 .ENV 文件中的 JWT_SECRET 变量没有改变,如果我在项目范围内搜索密钥,则找不到它。

这个命令有用吗?

Laravel 5.3,jwt-auth 0.5.9。

【问题讨论】:

尝试运行php artisan jwt:secret 这将返回错误“jwt”命名空间中没有定义命令。安装 jwt 并在命令行中运行 php artisan jwt:secret 命令后。 【参考方案1】:

来自文档:

不要忘记在配置文件中设置密钥!

由于您在搜索中找不到密钥,我认为您实际上还没有发布配置:

php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\JWTAuthServiceProvider"

文档看起来很清楚,GitHub 上的问题并没有提及您遇到的问题,因此请查看它们,看看您是否可能跳过了步骤。发生在我们最好的人身上! https://github.com/tymondesigns/jwt-auth/wiki/Installation

【讨论】:

我已经发布了配置,并且在/config 下有一个jwt.php 文件。在这个文件中有以下行:'secret' => env('JWT_SECRET', 'EAfZasuhuuhdgBLNtf07ZRXyQPcuKPEC'),,但是当我运行jwt:generate 命令时,这个键永远不会改变。这让我觉得它使用不同的密钥来生成令牌。 嗯,查看源代码,它应该在您的.env 文件中设置一个密钥。您是否收到“您确定要覆盖密钥吗?”信息? github.com/tymondesigns/jwt-auth/blob/develop/src/Console/… 否则我会删除软件包及其引用并尝试重新安装。 不,我没有收到该消息。每次它只是用不同的键重复相同的jwt-auth secret [...] set successfully.。我会重新安装。【参考方案2】:

最近在 0.5.9 和 0.5.12 中的测试表明 jwt:generate 命令仅更改 config/jwt.php IFF 中的值,它是正在使用的密钥。要亲自查看,请将.env 中的值设置为与config/jwt.php 中的值相同,它会在您第一次运行时更改配置中的值,但随后会中断。

稍作搜索表明开发人员没有计划在 0.5.* 中修复此问题。*

我编写了一个(诚然是相当笨拙的单行)bash 脚本,如果该 JWT_SECRET 不存在或更新所有出现的“JWT_SECRET=”,它将在 .env 中创建它:

env=".env"; secret="$(php artisan jwt:generate --show)"; oldsecrets="$(grep '^JWT_SECRET=' $env)"; if [ -z "$oldsecrets" ]; then sed -i "$ a JWT_SECRET=$secret" "$env"; else echo "$oldsecrets" | while IFS= read -r line ; do echo "$line"; sed -i -e "s/$line/JWT_SECRET=$secret/g" "$env"; done; fi

【讨论】:

【参考方案3】:

只需运行以下命令:

php artisan jwt:secret

Reference

【讨论】:

以上是关于如何使用 jwt-auth 在 Laravel 中正确设置 JWT 机密?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Laravel 5 设置 JWT-Auth

Laravel 和 jwt-auth。如何检查用户电子邮件是不是经过验证

如何将 ngAA 集成到 Laravel jwt-auth

注销不适用于 Laravel JWT-auth

laravel dingo/api添加jwt-auth认证

laravel安装jwt-auth及验证(实例)