在你看到的行为不同的是垂直于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。
我设置了一个OpenID提供程序,而不是使用者。但是,无论如何,我想现在我明白它的工作原理了。 – 2012-01-17 15:03:16
哦,哎呀。对不起,没有注意到这一点。因此,如果您希望自己的提供商允许RP执行我上面描述的操作,则需要提供一个OP标识符URL,我相信DNOA样本可以证明这一点。然后在您的OP端点中,您需要通过确定登录用户声明的标识符并在auth响应中自行设置来支持'IAuthenticationRequest.IsDirectedIdentity'。 – 2012-01-18 16:32:42