首先让我们建立一些术语:
The User-supplied identifier
是用户实际输入的字符串(或通过单击 RP 上的预定义按钮触发),触发 OpenID 发现发生。它没有标准化,并且永远不应该用来表示数据库中的用户,因为它不安全或不唯一,但它是一个必要的起点。对该标识符的发现会产生claimed identifier
or an OP Identifier
。示例:yahoo.com、myopenid.com 和rewarnott.myopenid.com
The Claimed Identifier
是用户“控制”或用作其身份的 OpenID 标识符。它可能或可能not是一个 URL(也可能是一个 XRI)。来自 OP 的肯定断言将始终是声明的标识符(即使发现是从 OP 标识符开始的)。例子:https://andrewarnott.myopenid.com/ https://andrewarnott.myopenid.com/
The OP Identifier
,或“OpenID 提供者标识符”是 RP 可以执行发现以开始identifier select
RP 还不知道用户声明的标识符是什么的流程。例子:https://me.yahoo.com/ https://me.yahoo.com/, http://www.myopenid.com/ http://www.myopenid.com/ and https://www.google.com/accounts/o8/id https://www.google.com/accounts/o8/id
The OP Endpoint
是 RP 将用户重定向到的实际 URL,以便对用户进行身份验证,用于建立共享关联或对使用 OP 私有关联的断言执行直接验证。例子:http://localhost/server.aspx http://localhost/server.aspx, http://localhost/provider.ashx http://localhost/provider.ashx, https://www.google.com/accounts/o8/ud https://www.google.com/accounts/o8/ud(注意 ud 结尾而不是 id)
因此,有了这些背景,您的OpenIdRelyingParty.CreateRequest
调用应该接收用户提供的标识符,该标识符也可以是声明的标识符或 OP 标识符。它应该not是 OP 端点。例如,您可以传入:
openIdRelyingParty.CreateRequest("http://localhost/sampleop/")
or
openIdRelyingParty.CreateRequest("http://localhost/user.aspx?username=bob")