9

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

我查看了 Tipfy 示例代码,但它似乎是在 OpenID 提供程序被硬编码到谷歌的假设下编写的。

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

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

4

2 回答 2

6

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

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

Tipfy 缺少什么?

Tipfy 不允许点b。以下工作流程
用户提交foo.blogspot.com
b. 框架foo.blogspot.com从 html 页面检索获取 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'

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

使用 Tipfy 支持应用程序中的任何 OpenID url 需要什么?

您应该使用Google App Engine 提供 OpenID 支持所采用的同一消费者用户空间库;这里是源代码,这里是一个活生生的例子。

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

* OpenID 代码是从tornado.auth移植的

于 2011-01-31T14:10:04.860 回答
2

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

于 2011-01-31T14:28:07.980 回答