将用户从Google App Engine迁移到Google OpenID

问题描述 投票:7回答:4

几个月前我从Google App Engine迁移出来。 但我仍然依赖它进行身份验证,因为我的用户是通过GAE上的user_id属性来标识的。

为此,我(现在的外部)应用程序使用加密,签名和带时间戳的登录请求将用户重定向到Google App Engine应用程序。 然后,GAE应用程序使用GAE的“用户”服务执行登录。 成功登录GAE后,用户再次使用加密,签名和带时间戳的响应重定向到我的外部应用程序。 可以在这里这里找到基本的实现。 正如您所看到的,这是非常基本的,并且依赖于导致性能不佳的严重加密。

我的外部应用程序(在本例中为Django应用程序)将user_id存储在用户表的密码字段中。 除了user_id之外,我只从GAE获得电子邮件地址,以便在Django中存储用户名和电子邮件。

现在我想删除对GAE服务的依赖。 想到的第一种方法可能是向每个用户发送一封电子邮件,要求他设置一个新密码,然后使用Django执行我自己的身份验证。

我更喜欢依赖Google的OpenID服务的解决方案,以便用户实际上没有任何区别。 这也是首选,因为无论如何我都需要将用户发送到Google以获取Google Calendar API的AuthSub令牌。

问题是我无法在不使用GAE的情况下找到获取给定Google帐户的GAE user_id属性的方法。 OpenID和所有其他身份验证协议使用不同的标识符。

所以现在问题是:谷歌是否提供了我可以用于此目的的任何API,我还没有看到? 有关如何迁移用户帐户的其他可能的解决方案或想法吗?

提前致谢!

python django google-app-engine openid
4个回答
2
投票

最好的方法是向用户显示“迁移”插件,将其重定向到Google OpenID提供商并提示他们在那里登录。 一旦他们在两个位置登录,您就可以匹配这两个帐户,并让他们将来通过OpenID登录。


1
投票

AFAIK是Google帐户和Google OpenID之间唯一的通用标识符。

  1. 当用户通过您当前的gae设置登录Google帐户时收到电子邮件。 使用User.email() 。 将此电子邮件与用户数据一起保存。

  2. 当您收到所有(大多数)用户的电子邮件时,请切换到Google OpenID。 用户登录时,获取电子邮件地址并在数据库中查找此用户。


1
投票

你为什么不尝试混合方法:

  1. 切换到OpenId
  2. 如果您的应用程序已经知道userId,那么您就完成了
  3. 如果没有询问用户,他是否有要迁移的帐户
  4. 如果是,请使用旧的mechansim登录并转移帐户
  5. 如果没有创建新帐户

0
投票

Google有一个唯一标识符,该标识符作为参数返回,并带有成功的OpenID身份验证请求 - * openid.claimed_id *。 如果您切换到使用OpenID,则在用户首次使用新方法登录时,您实际上可以为此参数交换user_id,而用户不会注意到有关其登录体验的任何不同内容。

此处概述了身份验证过程的文档。 我建议使用混合OpenID + OAuth方法,以便您可以将请求令牌与给定ID相关联,然后在返回时验证openid.claimed_id是否与原始请求令牌匹配。

© www.soinside.com 2019 - 2024. All rights reserved.