2011-01-31 50 views
9

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

我已经看过Tipfy示例代码,但它似乎是在假设OpenID提供程序是硬编码到Google的情况下编写的。

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

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

+1

你在看什么样的代码? – Gareth 2011-01-31 13:45:17

+2

@Gareth:http://www.tipfy.org/wiki/extensions/auth/openid/ – 2011-01-31 14:16:46

回答

6

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

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

什么Tipfy丢失?

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

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

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

Tipfy真的提供什么?

的Tipfy openid扩展*只需提供OpenIdMixin,这只是一个基类建设OpenID的支持,以特定的平台很有用(谷歌为例)。
事实上,GoogleMixin类扩展OpenIdMixin

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

它具有谷歌OpenID端点硬绳:

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

名称OpenIdMixin有点接近其他类的名字误导像GoogleMixinFriendFeedMixinFaceBookMixin等等; docstring应该更加清楚,指定该类应该仅作为基类扩展,而不能直接使用。

你需要什么来支持你的应用程序中使用Tipfy的任何OpenID网址?

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

具体来说,仔细看看openid.consumer.consumer.py文件以及XRDS/OpenID发现是如何发生的;我认为通过一些工作,你应该能够将这部分整合到Tipfy OpenIdMixin中。

*中的OpenID码从tornado.auth

+0

谢谢,它似乎是一个很好的解释 – 2011-02-06 23:10:45

2

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