如何使用OpenID而不询问用户的OpenID URL?

时间:2012-01-17 07:03:41

标签: .net authentication openid dotnetopenauth

我正在使用DotNetOpenAuth设置一个OpenID提供程序而且我被卡住了。

似乎OpenID要求用户首先提供他的OpenID URL,然后消费者将他重定向到提供者,将URL作为参数(checkid_setup模式)。

但是对于google和其他一些提供商,它的工作方式不同。您只需重定向到要登录的通用页面,或者选择您已登录的其中一个帐户。如果您使用单个帐户登录,则只需重定向回来。

这与checkid_immediate模式有什么关系吗?如果是这样,请给我一个链接到一篇解释其工作原理的文章。

1 个答案:

答案 0 :(得分:4)

您所看到的行为差异与您注意到的checkid_setup与checkid_immediate模式正交。

如果用户输入自己的OpenID,则称为声明的标识符。相反,如果用户只是点击(或键入)他的提供商(例如,在您的示例中为Google),则称为 OP标识符

例如,如果您在OpenID框中输入https://www.google.com/accounts/o8/id,您就会看到您所描述的行为,因为Google会帮助用户登录您的网站,无论该用户是谁。

所以在这一点上你有几个选择:

  1. 如果您的站点基于ASP.NET Web表单,则可以使用OpenIdButton控件,在相应的属性中键入https://www.google.com/accounts/o8/id标识符,然后用户可以单击该按钮只需使用他们的Google帐户登录。

  2. 如果您正在使用MVC(或使用网络表单但希望以编程方式执行此操作),则可以致电OpenIdRelyingParty.CreateRequest("https://www.google.com/accounts/o8/id")并将结果重定向到Google。

  3. 无论哪种方式,如果用户已登录Google,则无需登录Google。如果用户已经告知Google他们批准登录您的网站,那么在此登录过程中他们根本不会看到Google。