[問題] 請問 access token 使用問題

看板java作者 (DDFL)時間3年前 (2020/06/27 11:13), 3年前編輯推噓1(1011)
留言12則, 2人參與, 3年前最新討論串1/1
※狀況概述: 最近在研究 Spring Security 和 OAuth2 授權 目前的需求情境是:存取 API 需要登入 而 token 會儲存在 client,每次呼叫 API 時傳送該 token 登入可以使用註冊的帳密,也可以透過第三方登入 使用帳密登入,目前登入驗證成功後,會建立一個 JWT 回傳至 client 而第三方登入,Spring Security 的 OAuth2 filter 會從導頁至登入頁,到取得 access token 直接處理完 並且把 access token 和其它資訊存在 session 的樣子 目前 client 的開發人員是決定由他自己去取得 access token 第一個問題是 1. client 直接取得第三方的 access token 存取 API 時,server 需要驗證該 access token 是否有效 然後不希望每次 request 都要重驗 access token 有效性 驗證成功後建個 mapping 儲存在 cache 2. client 只要取得 authentication code 就好 再由 server 拿 code 去換 access token server 成功取得 access token 後儲存在 cache 想請問實務上的實做方式是哪種?或是是其它方式? 第二個問題是 目前只會存取自己 web 的服務,不需要存取第三方的 API 那不管問題一如何取得 access token 是否可以重新建一個 JWT 給 client 例如我希望 token 的有效期限是 30 分鐘 從第三方的 token 取得需要的資訊,然後重新建一份 JWT 給 client 每次 request 檢查是否過期,再決定是 server 直接重取 或是請 user 再重新登入 以前都是碰 Struts2 / Spring MVC + JSP 的環境 現在對於 SPA / APP + RESTful API 的開發模式蠻陌生的 還有很多問題需要犛清,不過還是想先確認上述二個問題實做是否有誤 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.43.69.88 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/java/M.1593227626.A.365.html

06/27 15:07, 3年前 , 1F
2的多出server拿code換token是避免access token流到client
06/27 15:07, 1F

06/27 15:08, 3年前 , 2F
提昇安全性(例如防止XSS攻擊偷走token),因為code換token會
06/27 15:08, 2F

06/27 15:10, 3年前 , 3F
再驗證一次是合法的server
06/27 15:10, 3F
請問是建議第2個方式比較好嗎 因為我們client開發人員認為他直接去拿第三方access token就好了 而server端基於不信任client傳來的資料,是一定要再驗證過的 若第三方的access token 被 user 以外的管道拿到 表示該管道就可以呼叫第三方的API取得user的資料了的意思 所以還是client拿code,讓server去換access token比較好嗎

06/27 15:11, 3年前 , 4F
第二個問題,基本上確認token正確後,本來server端就可以用
06/27 15:11, 4F

06/27 15:11, 3年前 , 5F
自己的登入方式處理,你要另發server自己的JWT token或傳統
06/27 15:11, 5F

06/27 15:12, 3年前 , 6F
的http session都可以,本來就不會只靠access token
06/27 15:12, 6F

06/27 15:16, 3年前 , 7F
access token是還要存取第三方的resource server時才用的
06/27 15:16, 7F
會部署在多server的環境,所以選擇傳token的方式 session的方式沒做過在多server的環境,除非存資料庫吧 或是要查一下多server的session實做方式 還有很多安全性方面的問題要確認,先感謝了 ※ 編輯: jtorngl (114.43.69.88 臺灣), 06/27/2020 17:29:33

07/04 13:29, 3年前 , 8F
主要還是看應用場景,最小授權原則,如果client沒必要直接
07/04 13:29, 8F

07/04 13:30, 3年前 , 9F
用到access token就不要讓client端拿到
07/04 13:30, 9F

07/04 13:31, 3年前 , 10F
如果沒有任何資訊會存在server session中的話,的確只用
07/04 13:31, 10F

07/04 13:31, 3年前 , 11F
token做成完全stateless會比較方便
07/04 13:31, 11F

08/01 18:20, 3年前 , 12F
跨多server的session管理可以用redis效率比存RDB好
08/01 18:20, 12F
文章代碼(AID): #1UzhbgDb (java)
文章代碼(AID): #1UzhbgDb (java)