[问题] 请问 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