DotNetOpenAuth:如何实现一个简单的OpenId提供程序?

每个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 …),所有这些都会触发exception“找不到OpenID端点”。 所有配置似乎都很好。

如何实现简单的OpenId提供程序? 我应该在OpenRelyingParty.CreateRequest调用哪个URL?

首先让我们建立一些术语:

User-supplied identifier是用户实际键入的字符串(或通过单击RP处的预定义按钮触发),以触发OpenID发现。 它没有规范化,并且永远不应该用于表示数据库中的用户,因为它不安全或不唯一,但它是一个必要的起点。 对此标识符的发现可以是claimed identifierOP 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,以便对用户进行身份validation,并用于建立共享关联或对使用OP私有关联的断言执行直接validation。 示例: 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") 

对于DotNetOpenAuth MVC示例,要使用的Open Id标识符URL为http://localhost:4864/User/Identity (其中OpenIdProviderMvc配置为在localhost上的端口4864上运行)