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

作者: jtorngl (Pedrosa go!)   2020-06-27 11:13:43
※狀況概述:
最近在研究 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 的開發模式蠻陌生的
還有很多問題需要犛清,不過還是想先確認上述二個問題實做是否有誤
作者: ssccg (23)   2020-06-27 15:07:00
2的多出server拿code換token是避免access token流到client提昇安全性(例如防止XSS攻擊偷走token),因為code換token會再驗證一次是合法的server第二個問題,基本上確認token正確後,本來server端就可以用自己的登入方式處理,你要另發server自己的JWT token或傳統的http session都可以,本來就不會只靠access tokenaccess token是還要存取第三方的resource server時才用的
作者: new122851 (未若柳絮因風起)   2020-08-01 18:20:00
跨多server的session管理可以用redis效率比存RDB好

Links booklink

Contact Us: admin [ a t ] ucptt.com