使用 Google 和我的服务器后端进行身份验证

问题描述

我正在创建一个带有离子的应用程序。我使用 google 身份验证,使用网络上的说明 (https://www.pragma.com.co/academia/lecciones/como-implementar-un-login-de-google-con-ionic)。 一切正常,我按照 Google (https://developers.google.com/identity/sign-in/web/backend-auth) 的建议获取并验证了 JWT。

我的问题是,在认证之后,我需要向我的后端发出获取/发布请求。保证请愿书真实性的最有效方法是什么? 在每个请求上发送 JWT 并验证它?我认为这不是很有效,也不安全。

提交 access_token 并使用 https://www.googleapis.com/oauth2/v1/tokeninfo?access_token= 对其进行验证?那么它应该控制关系 acces_token User 和,如何刷新这个令牌?

解决方法

基于初始身份验证和 jwt,您可以使用服务器端框架的标准会话管理功能创建一个普通的旧会话。这将是最安全的选项,客户端应用程序根本不会保存 jwt,只有一个随机会话 ID,在 httpOnly cookie 中,可以防止 XSS。这意味着您只有一个来源(您的前端应用与之对话的一个后端域)。

您可以在每个请求上发送 jwt 并每次都对其进行验证,这也很常见,但 jwt 实际上并不适用于此。无论如何,您可能会访问您的数据库以检查撤销/注销,因此它仍然不会是无状态的,用户将拥有多个随机数作为会话令牌提供一些攻击面,并且如果 jwt 未存储在 httpOnly cookie 中,它也容易受到 XSS 的影响。

如果您将 jwt 存储在 httpOnly cookie 中,那么在几乎所有情况下,一个普通的旧随机会话 ID 都更好、更安全(真正无状态应用程序的显着例外,但这是一种安全权衡,而您实际上并不大多数时候需要无状态)。实际使用 jwt 而不是将其存储在 httpOnly cookie 中的一个原因是,如果您想将其发送到多个来源,那么这是一个架构问题,如果您想要一个 API 网关或类似的,或者接受 XSS 的风险(并以其他方式减轻它)。