我有一个客户端(SPA)/服务器(REST)应用程序,我需要对客户端进行身份验证并让他们在资源服务器中登录。 应用程序通常必须使用位于第三方授权服务器上的外部OAuth2服务。 现在的问题是:应该存储refresh_token的位置?我有两个想法。
当refresh_token到期时,我故意省略这种情况。
我知道这两种解决方案都有其缺点。是否有适用于此问题的良好做法?
答案 0 :(得分:1)
访问令牌和刷新令牌应保留在获取它们的位置,特别是如果您没有为后端使用HTTPS。
没有自己的REST后端的SPA应该使用OAuth隐式流来获取访问令牌。隐式流不支持刷新令牌。
使用服务器端后端的应用程序应该使用授权代码流(您的情况)。授权代码被交换以通过后端访问和刷新令牌,并应保留在那里。您的REST后端可以使用访问令牌访问第三方资源,并使用刷新令牌在必要时续订访问令牌。
答案 1 :(得分:0)
第二种情况在我看来是最可行的。首先,您的授权服务器不必与资源服务器相同。您只能使用刷新令牌从授权服务器获取新的访问令牌。但授权服务器和资源服务器都可以在同一台服务器上实现。
第一个场景中的客户端如何获取新的访问令牌?它正在请求资源(步骤3),并且不期望获得新的令牌。
我会在客户端将刷新令牌存储在浏览器本地存储器中。这不是很安全,但可能是你能做到的最好的。