【问题标题】:Authentication with Google and my server backend使用 Google 和我的服务器后端进行身份验证
【发布时间】:2021-08-17 17:36:12
【问题描述】:

我正在使用 ionic 创建一个应用程序。我使用谷歌身份验证,使用网络上的说明 (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。

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

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

【问题讨论】:

    标签: angular security google-authentication ionic5 integrity


    【解决方案1】:

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

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

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

    【讨论】:

    • 简而言之,您应该根据收到的初始 jwt 创建一个普通的旧有状态会话。所以 1. 客户端转到 google idp 并获取令牌 2. 客户端将 jwt id 令牌发送到您的后端 3. 后端创建并存储一个随机会话 id 并将其设置为 httponly cookie 4. 后续请求根据会话 id 进行身份验证。这个会话管理已经是你使用的任何后端框架的一部分,你不应该重新实现它。如果所有这些都适合您的用例,那么它可能是最安全的选择。
    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    • 2020-04-22
    • 1970-01-01
    • 2021-12-05
    相关资源
    最近更新 更多