如何为网络应用程序和移动应用程序设置 python 社交身份验证?

问题描述

我们有

  1. 带有 Python social auth 的现有 Django 后端,用于通过 Google 登录,提供基于网络的应用程序和用于移动应用程序的 API。

  2. 一款带有 GoogleSignIn pod 的 iOS 移动应用

现在我们希望允许移动应用用户在应用内使用 Google 登录,然后在后端对其进行身份验证,以便他们可以通过应用访问他们的个人数据。

所以我对算法的想法是:

  1. 应用使用 GoogleSignIn 并最终收到 access_token

  2. 应用将此access_token发送到后端

  3. 后端验证此access_token获取/创建用户,将一些sessionid返回给应用

  4. 应用将此 sessionid 用于进一步请求。

问题出在第三步:令牌验证。我找到了两种验证方式:

1. Python社交认证流程

docs中所述:

token = request.GET.get('access_token')
user = request.backend.do_auth(token)
if user:
    login(request,user)
    return 'OK'
else:
    return 'ERROR'

这将是一个首选流程,因为它已经包含所有必需的步骤并且与网络应用完美配合(例如,帐户创建、新创建用户认设置、分析收集等)。

但问题是后端和应用程序使用不同的 CLIENT_ID 进行身份验证。这是由于 Google Developers Console 中的限制:创建凭据时,您需要选择是 Web 应用还是 iOS 应用,不能两者兼而有之。

我尝试使用不同的客户端 id(然后后端无法验证),尝试在应用程序内部使用 web id(然后 pod 不起作用),并尝试在 web 内部使用应用程序 id(然后后端无法再次验证).

2. Google Api 客户端库

另一种选择是利用 Google Sign-In for iOS documentation 中的方式:

from google.oauth2 import id_token
from google.auth.transport import requests

try:
    idinfo = id_token.verify_oauth2_token(token,requests.Request(),CLIENT_ID)
    userid = idinfo['sub']
except ValueError:
    # Invalid token
    pass

它起作用了,但是在这里我们缺少社交身份验证提供的所有管道(例如,我们需要以某种方式创建用户),而且我找不到从中间启动管道的正确方法,而我担心它会非常脆弱且容易出错。

解决方案的另一个问题是,实际上我们还使用 Apple 登录和 Facebook 登录,而此解决方案将需要对每个后端进行临时编码,这也会带来更多混乱和不可靠性。

>

3.网页浏览

第三种选择是不在 Swift 中使用 SDK,而只在 Web 应用程序中使用 Web 视图,就像在浏览器中一样。

解决了管道和客户端 ID 的问题。

但它看起来不是原生的,并且一些用户可能怀疑网络钓鱼企图(它与试图通过制作外观相同的表单来窃取 Google 身份的恶意应用程序有何不同?)。另外,我不确定它是否可以与设备上配置的帐户很好地配合。而且它甚至需要我们打开浏览器才能登录Apple,这看起来有些尴尬。而且我们不确定这样的应用会通过审核。

但是,也许,这些都是小问题?

那你怎么看?有没有第四种选择?或者也许可以改进上面的选项?在您的应用中是如何解决的?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)