感谢您研究失败的原因并已经与 OP 进行了沟通。这应该使事情变得更快。OP 操作员的 OP 配置不正确。从 OpenID 2.0 规范第 11.2 节,我们读到:
如果声明中包含声明的标识符,则它必须已被依赖方发现,并且声明中的信息必须存在于发现的信息中。声明的标识符不得是 OP 标识符。
从最后一句中,我们得到从用户标识符返回的“静态”XRDS 不能是 OP 标识符,但它确实是,并且从规范的其他地方我们了解到 OP 标识符优先于用户标识符(即为什么这里禁止成为 OP 标识符)。OP 应该修复他们从用户标识符返回的 XRDS 文档,以省略 OP 标识符服务端点。
请将上述内容转发给任何有问题的 OP,并要求他们纠正错误。
不支持也不建议使用以下内容,因为它会导致您的依赖方偏离 OpenID 2.0 规范,违反“MUST NOT”条款,并且可能会在您的应用程序中引入安全漏洞:
有一种方法可以配置 DotNetOpenAuth 依赖方,即使这些错误的 OP 也能正常工作,上述免责声明适用于此方法。将此代码段添加到您的 web.config 文件中:
<dotNetOpenAuth>
<openid>
<relyingParty>
<security allowDualPurposeIdentifiers="true" />
</relyingParty>
</openid>
</dotNetOpenAuth>
如果您使用 NuGet 在 Web 应用程序中安装 DotNetOpenAuth,那就足够了。但是,如果您收到有关这些标签中的任何一个无法识别的错误,您可能需要在 web.config 文件的顶部将其合并:
<configuration>
<configSections>
<section name="dotNetOpenAuth" type="DotNetOpenAuth.Configuration.DotNetOpenAuthSection" requirePermission="false" allowLocation="true"/>
</configSections>
</configuration>