【发布时间】:2022-01-06 20:42:20
【问题描述】:
我正在构建一个具有基本客户端-服务器架构的 Web 应用程序。前端使用 react (nextjs) 运行,后端在 rails 上。但是,问题将更多地是关于前端的身份验证/授权 + 会话处理的流程。
我正在使用 Oauth 提供者来处理 身份验证,但不需要他们的任何授权,因为我不需要 oauth 提供者的资源(例如驱动器、日历等)。 )
对于授权,因为我想访问我的 API 的资源,它是 API 本身处理客户端(前端)向 rails API 发出的任何请求的授权。
现在对于初始身份验证,这是我正在使用的流程,取自 https://blog.prototypr.io/how-to-build-google-login-into-a-react-app-and-node-express-api-821d049ee670:
对以下问题很重要的实施细节:
我使用 JWT 作为访问令牌(由我的 API 生成的那些),我只是使用仅在我的 API 上可用的密钥对其进行签名,因此从前端的角度来看访问令牌是不可读的。
在前端,它是一个 React 应用程序,我使用以下包来处理 OAuth 流程google-react-login
从 Google(OAuth 提供商)收到的信息、使用什么 1- 我收到(除其他外)来自 Google 的 IdToken 和访问令牌。此外,我显然应该收到一个刷新令牌(我没有看到)。对于我的用例,我只需要来自 Google 的 idToken 对吗?
撤销刷新令牌(注销),重新登录流程?
2- 据我了解,出于安全原因,访问令牌需要短暂存在。所以我需要向我的客户端应用程序返回一个刷新令牌,以便能够经常生成新的访问令牌。但是,一旦刷新令牌达到其到期时间,我是否需要注销用户并提示他通过 Google 重新登录并基本上重做步骤 1 到 5(请参阅图 1)?
如何通过访问令牌维护会话
3- 从前端的角度来看,我可以假设仅仅拥有一个刷新令牌就意味着用户已登录吗?一旦服务器撤销访问令牌和刷新令牌,这意味着用户已注销,我需要为未经身份验证的用户输出 Web 应用程序的视图?这意味着在每次重新加载页面后,我都需要检查是否存在访问和刷新令牌?
谢谢
【问题讨论】:
-
与人们的看法相反,cookie 是一个简单的 ID,可以被暴力破解并允许黑客进入任何用户帐户。因此请记住,可能会发生劫持,这或多或少不安全,但会增加双重身份验证,从而确保您的安全。
-
是的,这就是我使用短期访问令牌来授权用户向我的 API 发出请求的原因。此外,该令牌使用一种算法进行编码,除了令牌只有很短的生存时间这一事实之外,该算法很难进行暴力破解。通过双重身份验证,您是在谈论 google 身份验证?
标签: javascript authentication oauth-2.0 jwt authorization