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 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,以便对用户进行身份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上运行)