簡體   English   中英

如何使用 jwt-auth 在 Laravel 中正確設置 JWT 機密?

[英]How to correctly set a JWT secret in Laravel with jwt-auth?

我想在我的項目中測試 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 vendor:publish --provider="Tymon\JWTAuth\Providers\JWTAuthServiceProvider"

文檔似乎很清楚,GitHub上的問題沒有提到你遇到的問題,所以看一看它們,看看你是否可以跳過步驟。 發生在我們最好的人身上! https://github.com/tymondesigns/jwt-auth/wiki/Installation

最近在0.5.9和0.5.12中的測試表明jwt:generate命令僅改變config/jwt.php的值IFF它是使用中的密鑰。 要自己查看,請將.env的值設置為與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

只需運行此命令

php artisan jwt:secret

參考

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM