使用任何带有Tipfy的OpenID进行身份验证

时间:2011-01-31 13:43:02

标签: python google-app-engine openid tipfy

我正在开发我的应用程序的身份验证部分,并且我遇到了使用OpenID进行编码身份验证的问题。

我查看了Tipfy示例代码,但似乎是在假设OpenID提供程序是硬编码为google的情况下编写的。

我希望用户能够提供他们想要的任何OpenID(不是重点吗?)。

有没有人有任何示例代码显示用户使用用户提供的OpenID登录?

2 个答案:

答案 0 :(得分:6)

Tipfy是否允许任何OpenID身份验证?

如果您要使用Tipfy对任何OpenID Url进行身份验证,您不能这样做开箱即用。
一个主要原因是因为Tipfy没有任何发现机制来从给定的OpenID用户URL检索OpenID端点。

缺少什么Tipfy?

Tipfy不允许以下工作流程的 b。点:
a。用户提交foo.blogspot.com
b。框架从html页面检索foo.blogspot.com获取OpenId端点:

<link rel="openid.server" href="http://www.blogger.com/openid-server.g" />

c。框架将用户重定向到远程登录页面。

Tipfy真正提供了什么?

Tipfy openid扩展名 * 只提供OpenIdMixin,这只是一个基类,可用于构建对特定平台(例如Google)的OpenID支持。 /> 实际上,GoogleMixin类扩展了OpenIdMixin

class GoogleMixin(OpenIdMixin, OAuthMixin):
    """A :class:`tipfy.RequestHandler` mixin that implements Google OpenId /
    OAuth authentication.

它的Google OpenID端点是硬边的:

_OPENID_ENDPOINT = 'https://www.google.com/accounts/o8/ud'

名称OpenIdMixinGoogleMixinFriendFeedMixinFaceBookMixin等其他类名称附近有点误导; 文档字符串应该更清楚,以指定该类应该只是作为基类扩展而不是直接使用。

使用Tipfy,您需要在应用程序中支持任何OpenID网址?

您应该使用Google App Engine采用的相同消费者用户区域库来提供OpenID支持; here源代码和here实例。

具体而言,仔细查看openid.consumer.consumer.py文件以及XRDS / OpenID发现的发生方式;我认为,通过一些工作,您应该能够将此部分集成到Tipfy OpenIdMixin

* OpenID代码从tornado.auth

移植

答案 1 :(得分:2)

该代码只是一个例子。您只需要允许用户通过表单指定其OpenID提供程序的端点URL,并从POST获取值。这只是一个字符串。