我可以使用扩展程序将登录名和密码传递给OpenID提供程序吗?

时间:2011-07-26 19:41:35

标签: authentication openid offline

将通过OpenID控制的登录页面由扩展程序控制。我可以请求URL并传入扩展名,然后使用扩展名传递OP吗?如果没有哪种数据可以通过扩展从RP转移到OP?如果是,它的可扩展性如何,我是否必须编写每个OP的单独代码,或者标准是否会帮助我? 同样在不太可能的XY问题的情况下 - 我需要某种数据,这将允许我离线验证OpenID用户(至少一次成功的在线登录后)。因此,如果我是提供登录和密码文本字段的人,我将能够使用用户的密码哈希它并用于离线身份验证。是的,我需要使用OpenID而不是其他系统,因为这是要求。对不起,这是一个丑陋的问题。

1 个答案:

答案 0 :(得分:1)

我认为您不应该将用户ID /密码传递给OpenID提供程序(或者至少不是密码)。 OpenID背后的想法是提供商负责登录,因此利用OpenID的 web 应用程序将不知道登录凭据。 OpenID为您提供了一些authorization information,例如昵称,全名,电子邮件等。此信息与用户自身的OpenID相结合,应该足以为您提供该用户的唯一身份验证,而无需密码。

您的应用程序需要允许用户转到OpenID提供商的页面,在那里输入他们的凭据,一旦通过身份验证,您将收到来自OpenID的响应,指示身份验证是否成功并随后向您提供用户的信息。

更新

就像我在评论中提到的那样:OpenID标准没有定义一种向OpenID提供商发送密码的方式。因此,您无法以您想象的方式使用OpenID标准。

更新2.0

我们以myOpenID为例:为了将myOpenID用作OpenID提供程序,您必须使用OpenID注册您的域。或者,您可以enable OpenID for your website by contacting Janrian(myOpenID的所有者),但我会说您仍然需要向他们注册网站。在任何一种情况下,您必须在您的域或您的网站上拥有一个登录页面,该页面接受来自OpenID提供程序的身份验证响应(在本例中为myOpenID)。那么让我们来看看需要什么:

  1. 当您向myOpenID提供商发出网络请求时,您必须欺骗网络浏览器。
  2. 在该网页请求中,您填写了接收客户端密码的表单(同样,您必须欺骗客户端执行此操作)。
  3. 您必须在使用OpenID提供商注册的网站(例如myOpenID)上运行某种服务。
  4. 您必须向服务发送一条消息(HTTP),您希望为特定用户提供身份验证响应(并在用户通过身份验证时为其提供回调的方式)。
  5. 该服务将从OpenID提供程序获取任何传入的身份验证响应。
  6. 该服务会将该身份验证与您在步骤4中告知其预期的用户ID相匹配。
  7. 该服务将向您的应用程序发送身份验证响应(回调)。
  8. 您必须接受该服务的身份验证响应。
  9. 最困难的部分可能是第1步和第2步,但是应该有很多在线教程可以告诉你如何做到这一点(抱歉,我没有时间查找具体的教程)。

    在任何情况下,我都会想象你可以做到这一点,但这远非琐碎,而且我以前从未见过它。

    OpenID如此受欢迎的部分原因正是因为人们不必与服务提供商(即您的应用)共享其凭据,他们只与OpenID提供商共享。您应该考虑的另一件事是用户是否同意以您希望他们使用OpenID的方式使用OpenID。 换句话说,人们使用OpenID提供商的一个主要原因是他们避免完全按照您的要求去做:给你他们的密码!

    更新3.0

    您可以转到新的域名注册页面,使用myOpenID注册域名:https://www.myopenid.com/new_domain