登入鑑權方案怎麼設計提示詞(Session 與 JWT 怎麼選、刷新令牌、退出登入與強制下線、令牌存儲位置)

新項目要做登入鑑權,或者現有方案出了問題(退出登入後令牌仍然有效、改密碼後舊裝置還能用、令牌被盜用)時用:AI 根據客戶端類型和安全要求在會話與 JWT 之間做選擇,設計令牌有效期、刷新與輪換、吊銷和存儲方式,並給出關鍵代碼和安全檢查清單。

NNathaniel bigo··原創首發·AI 輔助撰寫
通用大模型 對話模型通用
你是一名身份認證與安全方面的後端架構師。請為我的項目設計登入鑑權方案。

- 客戶端類型:[客戶端類型](例:同域 Web、App、小程式、第三方調用)
- 用戶規模與部署:[規模與部署](例:10 萬用戶,多實例部署)
- 安全要求:[安全要求](例:改密碼後所有裝置下線,後台可強制下線)
- 登入方式:[登入方式](例:帳號密碼、短訊驗證碼、第三方登入)
- 技術棧:[技術棧]
- 現有方案(如果有):
  [現有方案說明]

請輸出:
1. 方案選擇:服務端會話與 JWT 各自的優缺點(吊銷難易、橫向擴展、跨域與移動端、性能),結合我的客戶端類型和安全要求給出推薦。說明「JWT 天然無狀態」這一說法在需要吊銷時的侷限。
2. 令牌設計(如果使用令牌):
   - 訪問令牌短期有效,刷新令牌較長期有效;刷新令牌每次使用後輪換,並檢測舊刷新令牌被重複使用(可能被盜)的情況;
   - 令牌中只放必要的標識,不放敏感資料;
   - 簽名算法與密鑰管理,校驗時固定允許的算法。
3. 存儲位置:
   - Web 端:使用帶安全屬性的 Cookie(僅 HTTP 訪問、僅 HTTPS、同站策略)與放在瀏覽器本地存儲的風險對比,以及對應的跨站請求偽造防護;
   - App 端:使用系統提供的安全存儲。
4. 吊銷與下線:退出登入、修改密碼、後台強制下線、可疑登入時,如何讓已發出的令牌或會話失效(例如令牌版本號、黑名單、刪除會話)。
5. 登入接口的防護:限制失敗次數與頻率、統一的錯誤提示(不暴露「用戶不存在」)、密碼使用專門的慢哈希算法存儲。
6. 給出關鍵代碼:登入、刷新、校驗中間件、退出登入。
7. 安全檢查清單。

高亮處換成你自己的內容:[客戶端類型]、[規模與部署]、[安全要求]、[登入方式]、[技術棧]、[現有方案說明]

ChatGPT Plus 充值

已被複製 0 次

使用說明

怎麼填變量:[客戶端類型] 是選型的關鍵:同域的 Web 應用使用服務端會話加 Cookie 往往最簡單也最安全;有 App、小程式或第三方調用時,令牌方案更合適。[安全要求] 寫清楚是否需要「改密碼後所有裝置下線」「後台強制下線」,這直接決定了是否需要服務端儲存狀態。

常見坑:

  • 選擇 JWT 後才發現退出登入、改密碼都無法讓舊令牌失效,只能等它自然過期。需要吊銷能力時,必須在服務端儲存一些狀態。
  • 把令牌放在瀏覽器本地存儲,一旦頁面存在跨站腳本漏洞,令牌就會被直接讀走。
  • 刷新令牌有效期很長又不輪換,被盜後攻擊者可以長期冒充用戶。

追問技巧:追問「加上第三方登入(如微信、Apple)後,帳號綁定和合並怎麼設計」,或「設計異地登入提醒和裝置管理頁面」。

示例輸出

示例,僅供參考(同域 Web + App,節選)

推薦:Web 端使用服務端會話加安全 Cookie;App 端使用短期訪問令牌(15 分鐘)加可輪換的刷新令牌(30 天)。兩端共用一張會話表,用於吊銷。

場景處理方式
退出登入刪除當前會話記錄;App 端同時作廢該會話的刷新令牌
修改密碼用戶表中的令牌版本號加 1,所有舊令牌校驗失敗
刷新令牌被重複使用判定為可能被盜,作廢該用戶的整個令牌家族並要求重新登入
js
// 校驗中間件(節選):校驗簽名後,再比對令牌中的版本號
const payload = jwt.verify(token, PUBLIC_KEY, { algorithms: ['RS256'] })   // 固定允許的算法
const user = await users.findById(payload.sub)
if (!user || user.tokenVersion !== payload.ver) throw new Unauthorized()

同款作品

用這條提示詞做出來的作品;原作者會因此獲得積分

做同款

還沒有同款,來做第一個。

Nathaniel 的更多內容

同主題

同模型

0 條評論

登入 後參與評論

還沒有評論,來搶沙發~