反应 apollo graphql 和谷歌身份验证流程

Posted

技术标签:

【中文标题】反应 apollo graphql 和谷歌身份验证流程【英文标题】:react apollo graphql and google authentication flow 【发布时间】:2021-03-31 08:41:06 【问题描述】:

我正在尝试在基于 react apollo graphql 的应用程序上使用 google 进行完整的流身份验证。我将react-google-login 用于前端部分,将graphql / express 与google-auth-library 用于后端部分。 我当前的身份验证流程是:

从前端通过 react-google 登录获取 google 令牌 ID。 使用 tokenId 调用我的 graphql 服务器的 googleLogin 突变 参数。 在后端使用 react-auth-library 的 verifyIdToken 函数并获取 用户的有效负载并创建或获取与电子邮件匹配的用户 有效载荷。 在前端发送用户信息和当前 tokenId。 在前端,将后端的响应存储在上下文中 实例化用户会话并使用它来管理我的反应路由 应用程序。

我的授权流程几乎相同:graphql 上下文中的后端,从授权标头中检查令牌 ID,使用 google-auth-library 的 verifyIdToken 获取用户有效负载并返回找到的用户。在每个受保护的突变中,检查 graphql 上下文是否有用户字段。

在这个流程中,我遇到了几个问题,我没有解决方案来正确解决这个问题。我的第一个问题是当用户长时间连接时,我存储在授权标头中的 tokenId 被弃用。我不知道如何刷新用户连接。我唯一实际的解决方案是在服务器抛出身份验证错误时将用户重定向到登录页面,并且基本上使用 react-google-login 的自动登录来再次启动身份验证过程。 我担心我的身份验证/授权流程不好。如果有人对我的流程有任何建议或意见,请告诉我。提前感谢您的帮助

【问题讨论】:

【参考方案1】:

至于如何刷新用户令牌/连接,您应该可以使用来自 Google res 的 refreshTokenSetup 函数,它将为您轻松处理新的 tokenIds

我在这里找到了一篇非常有用的文章: https://dev.to/sivaneshs/add-google-login-to-your-react-apps-in-10-mins-4del

还有一个不错的:

https://www.apollographql.com/blog/setting-up-authentication-and-authorization-with-apollo-federation/

【讨论】:

以上是关于反应 apollo graphql 和谷歌身份验证流程的主要内容,如果未能解决你的问题,请参考以下文章

graphql_devise 用于 Rails/Graphql/Apollo/React 中的身份验证。 “字段需要身份验证”错误

Firestore 云功能 apollo graphql 身份验证

React、Apollo 2、GraphQL、身份验证系统

身份验证 Apollo Graphql for android

身份验证Apollo Graphql for android

未处理的拒绝(错误):GraphQL 错误:未经过身份验证