每个OpenId提供商都有一个提供商Url(例如Google:https://www.google.com/accounts/o8/id)
使用OpenIdRelyingParty.CreateRequest
我成功设法将用户重定向到Google提供商Url并接收提供商回调。一切都很好。
现在我正在尝试实现我自己的简单OpenId提供程序(我希望在我的示例中充当Google)。 DotNetOpenAuth有一个名为OpenIdProviderWebForms的提供程序演示。在过去的4或5个小时内,我一直尝试使用我设法在Google上连接的相同演示连接到它。第一:我不清楚我应该调用哪个URL。我尝试了所有Urls(server.aspx,provider.ashx ...),并且所有这些都触发了异常“找不到OpenID端点”。所有配置似乎都很好。
如何实现简单的OpenId提供程序?我应该在OpenRelyingParty.CreateRequest
?
答案 0 :(得分:16)
首先让我们建立一些术语:
User-supplied identifier
是用户实际键入的字符串(或通过单击RP上的预定义按钮触发),以触发OpenID发现。它没有规范化,并且永远不应该用于表示数据库中的用户,因为它不安全或不唯一,但它是一个必要的起点。对此标识符的发现可以是claimed identifier
或OP Identifier
。示例:yahoo.com,myopenid.com和andrewarnott.myopenid.com
Claimed Identifier
是用户“控制”或用作其身份的OpenID标识符。它可能或可能不是一个URL(它可能是一个XRI)。来自OP的肯定断言将始终是声明的标识符(即使以OP标识符开始发现)。示例:https://andrewarnott.myopenid.com/
OP Identifier
或“OpenID提供商标识符”是RP可以执行发现以开始identifier select
流的OpenID标识符,其中RP尚不知道用户的声明标识符将是什么。示例:https://me.yahoo.com/,http://www.myopenid.com/和https://www.google.com/accounts/o8/id
OP Endpoint
是RP将用户重定向到的实际URL,以便对用户进行身份验证,并用于建立共享关联或对使用OP私有关联的断言执行直接验证。示例:http://localhost/server.aspx,http://localhost/provider.ashx,https://www.google.com/accounts/o8/ud(请注意ud结尾而不是id)
因此,在所有背景下,您的OpenIdRelyingParty.CreateRequest
呼叫应该接收用户提供的标识符,该标识符也可以是声明的标识符或OP标识符。 不应该是OP端点。例如,您可以传入:
openIdRelyingParty.CreateRequest("http://localhost/sampleop/")
或
openIdRelyingParty.CreateRequest("http://localhost/user.aspx?username=bob")
答案 1 :(得分:2)
对于DotNetOpenAuth MVC示例,要使用的Open Id Identifier URL为http://localhost:4864/User/Identity
(其中OpenIdProviderMvc配置为在localhost上的端口4864上运行)