我正在使用DotNetOpenAuth设置一个OpenID提供程序而且我被卡住了。
似乎OpenID要求用户首先提供他的OpenID URL,然后消费者将他重定向到提供者,将URL作为参数(checkid_setup模式)。
但是对于google和其他一些提供商,它的工作方式不同。您只需重定向到要登录的通用页面,或者选择您已登录的其中一个帐户。如果您使用单个帐户登录,则只需重定向回来。
这与checkid_immediate模式有什么关系吗?如果是这样,请给我一个链接到一篇解释其工作原理的文章。
答案 0 :(得分:4)
您所看到的行为差异与您注意到的checkid_setup与checkid_immediate模式正交。
如果用户输入自己的OpenID,则称为声明的标识符。相反,如果用户只是点击(或键入)他的提供商(例如,在您的示例中为Google),则称为 OP标识符。
例如,如果您在OpenID框中输入https://www.google.com/accounts/o8/id
,您就会看到您所描述的行为,因为Google会帮助用户登录您的网站,无论该用户是谁。
所以在这一点上你有几个选择:
如果您的站点基于ASP.NET Web表单,则可以使用OpenIdButton
控件,在相应的属性中键入https://www.google.com/accounts/o8/id
标识符,然后用户可以单击该按钮只需使用他们的Google帐户登录。
如果您正在使用MVC(或使用网络表单但希望以编程方式执行此操作),则可以致电OpenIdRelyingParty.CreateRequest("https://www.google.com/accounts/o8/id")
并将结果重定向到Google。
无论哪种方式,如果用户已登录Google,则无需登录Google。如果用户已经告知Google他们批准登录您的网站,那么在此登录过程中他们根本不会看到Google。