1

我们有一个 django 项目,它使用该Graphene-Django库在我们的项目中实现 GraphQL API。我们的移动应用程序可以访问此后端。对于应用程序的身份验证,我们使用该django-graphql-jwt库,它是 Django 中采用 GraphQL 方法的 JSON Web Token 库。

现在我们想在我们的系统中实现 Facebook 登录,并通过它在 Facebook 中进行身份验证。经过身份验证后,从移动应用程序发送到我们后端的只是用户的电子邮件。如何在django-graphql-jwt没有密码的情况下注册和验证用户?或者有更好的工作流程吗?

4

1 回答 1

1

After authentication, what will be sent to our backend from the mobile app is only the email of the user.

嘿,Al Ryan,这似乎是 OAuth 的错误实现,您从 facebook 返回的是一个令牌,您将该令牌发送到您的服务器,它会将其发送回 facebook 以验证它不是伪造的,然后只有用户可以登录在。

否则,任何人都可以通过电子邮件调用服务器并充当该用户。

是一个支持社交认证和 JWT 的库,看看这是否有帮助。

我也在分享我的项目中的解决方案

  1. 创建一个名为 graphql 突变的 facebookAuth
  2. 以上突变将采用两个参数access_tokenaccess_verifier
  3. 向此 url 发送 GET 请求f"https://graph.facebook.com/me?fields=name,email&access_token={access_token}"
  4. 如果 json 响应有 key errors,则停止用户登录。
  5. 否则上面的响应将包含email,用它来创建/获取一个User对象。
  6. 现在您只需要从您的 mutate 函数返回 JWT 令牌。
  7. 要生成访问和刷新令牌,请调用此函数jwt_encode,导入为from dj_rest_auth.utils import jwt_encode
  8. 以上将返回元组access_token、refresh_token

注意我使用了 dj_rest_auth 而不是 django-graphql-jwt,但它非常等效,您只需要一个函数来签署 JWT,其余都是自定义逻辑,所以最好自己编写。

PS:OAuth 是攻击者的敏感入口点,因此实施是安全的,您可以通过 atul7555[at]gmail.com 联系以获得任何帮助。

于 2021-09-14T05:49:37.920 回答