我想在我的项目中测试 JWT 的身份验证,因为 JWT 将从应用程序外部发送,因此必须使用我的应用程序中的密钥对它们进行签名。这可能吗?有谁知道允许您使用秘密签署令牌的网站?
我试过http://jwtbuilder.jamiekurtz.com/但{"error":"token_invalid"}如果我输入由jwt:generate. 这使我相信此命令返回的密钥实际上并不是用于在我的应用程序中对 JWT 进行签名的密钥。
我正在使用php artisan jwt:generate生成一个密钥,它返回以下内容:
jwt-auth secret [...] set successfully.
Run Code Online (Sandbox Code Playgroud)
但是它在哪里设置?JWT_SECRET我的 .ENV 文件中的变量不会改变,如果我对密钥执行项目范围的搜索,则找不到它。
这个命令有效吗?
Laravel 5.3,jwt-auth 0.5.9。
小智 2
最近在 0.5.9 和 0.5.12 中的测试表明该jwt:generate命令仅更改 IFF 中的值config/jwt.php,它是正在使用的密钥。要亲自查看这一点,请将 in 中的值设置.env为与 in 中的值相同config/jwt.php,它会在您第一次运行它时更改 config 中的值,但随后它会中断。
一些搜索表明开发人员没有计划在 0.5.* 中修复此问题
我写了一个(诚然相当笨拙的单行)bash脚本,如果它不存在,它将在.env中创建这个JWT_SECRET,或者更新所有出现的“JWT_SECRET=”:
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
Run Code Online (Sandbox Code Playgroud)