几个月前我从Google App Engine迁移出去。但是我仍然依靠它进行身份验证,因为我的用户在GAE上通过其user_id属性进行标识。将用户从Google App Engine迁移到Google OpenID
为此,我的(现在是外部的)应用程序使用加密,签名和时间戳登录请求将用户重定向到Google App Engine应用程序。 GAE应用程序然后使用GAE的“用户”服务执行登录。在GAE上成功登录后,用户将再次使用加密的,带符号和时间戳的响应重定向到我的外部应用程序。 基本的实现可以找到here和here。正如你所看到的,这是非常基本的,并且依赖于沉重的加密导致性能不佳。
我的外部应用程序(在本例中为Django应用程序)将user_id存储在用户表的密码字段中。除了user_id之外,我只能从GAE获取电子邮件地址,以在Django中存储用户名和电子邮件。
现在我想删除对GAE服务的依赖。想到的第一种方法可能是向每个用户发送一封电子邮件,要求他设置一个新密码,然后使用Django执行我自己的认证。
我更喜欢依靠Google的OpenID服务的解决方案,这样用户实际上没有区别。这也是首选,因为我需要将用户发送给Google,以获取Google Calendar API的AuthSub令牌。
问题是,我找不到一种方法可以在不使用GAE的情况下获取给定Google帐户的GAE user_id属性。 OpenID和所有其他身份验证协议使用不同的标识符。
所以,现在的问题是:Google是否提供了我可以用于此目的的API,但我还没有看到?有没有其他可能的解决方案或想法如何迁移用户帐户?
在此先感谢!
感谢您的回复。与此相关的问题是,用户可能在此期间更改了他的电子邮件地址,例如,从非gmail地址转换为gmail或另一个非gmail地址。我之前遇到过这种情况,必须手动提供一种方式让用户与我联系并重新链接其旧帐户和相关数据。 user_id是一个永不改变的静态标识符,我真的很想确保没有人被抛在后面。 – mback2k 2012-04-04 14:34:49