2012-01-17 68 views
4

我设置了一个使用DotNetOpenAuth的OpenID提供程序,并且卡住了。如何在不询问用户OpenID URL的情况下使用OpenID?

看来,OpenID的需要用户首先提供其OpenID URL,然后消费者将他重定向到供应商,给URL作为参数(checkid_setup模式)。

但与谷歌和一些其他供应商,它的工作原理不同。您只需重定向到您要登录的通用页面,或者选择您已登录的其中一个帐户。或者如果您使用单个帐户登录,则只需重新导向。

这是莫名其妙相关checkid_immediate模式?如果是这样,请给我一个链接到一篇文章解释如何运作。

回答

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。

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

+0

我设置了一个OpenID提供程序,而不是使用者。但是,无论如何,我想现在我明白它的工作原理了。 – 2012-01-17 15:03:16

+0

哦,哎呀。对不起,没有注意到这一点。因此,如果您希望自己的提供商允许RP执行我上面描述的操作,则需要提供一个OP标识符URL,我相信DNOA样本可以证明这一点。然后在您的OP端点中,您需要通过确定登录用户声明的标识符并在auth响应中自行设置来支持'IAuthenticationRequest.IsDirectedIdentity'。 – 2012-01-18 16:32:42