使用DotNetOpenAuth创建OpenID提供程序

使用DotNetOpenAuth创建OpenID提供程序,openid,dotnetopenauth,Openid,Dotnetopenauth,我正在尝试用DotNetOpenAuth实现一个OpenID提供程序。我提供一个OpenID url,消费者发现我的端点 我登录到我的提供者,提供者将声明的标识符和本地标识符返回给消费者 但消费者响应有以下例外情况: The OpenID Provider issued an assertion for an Identifier whose discovery information did not match. Assertion endpoint info: ClaimedIden

我正在尝试用DotNetOpenAuth实现一个OpenID提供程序。我提供一个OpenID url,消费者发现我的端点

我登录到我的提供者,提供者将声明的标识符和本地标识符返回给消费者

但消费者响应有以下例外情况:

The OpenID Provider issued an assertion for an Identifier whose discovery information did not match. 
Assertion endpoint info: 
  ClaimedIdentifier: http://localhost/OpenIDUser.aspx/myuser
  ProviderLocalIdentifier: http://localhost/OpenIDUser.aspx/myuser 
  ProviderEndpoint: http://localhost/OpenIDAuth.aspx
  OpenID version: 2.0 
  Service Type URIs: 
Discovered endpoint info: []
http://localhost/OpenIDAuth.aspx
是我的端点。
http://localhost/OpenIDUser.aspx/myuser
是我的用户标识符url,我可以成功浏览到它。它在标头中具有指向端点的链接,如下所示:

无论我尝试什么,异常的“发现的端点信息:[]”部分始终是一个空数组


有人能帮忙吗?

您走到这一步让人感到困惑,因为要看到这个错误,RP必须能够在重定向到提供商之前成功完成发现阶段(在这种情况下,为什么它会第二次失败),或者这是一个未经请求的断言(这很好,但不寻常)

但我看到的一个缺陷是你的标签:

<link rel="openid.server" href="http://localhost/OpenIDAuth.aspx"></link>

是OpenID1.1的广告,而您的提供者声明OpenID2.0。IIRC,正确的标签应该是:

<link rel="openid2.provider" href="http://localhost/OpenIDAuth.aspx"></link>

还有一个提示:当您开发提供程序并使用DotNetOpenAuth RP对其进行测试时,请确保将RP(也可能是OP)设置为不在web.config中缓存发现结果,以便您知道当前代码中的成功和失败实际上是最新的:

<dotNetOpenAuth>
    <openid cacheDiscovery="false">


您可以看到更多配置选项,以及上述xml出现的上下文。

对不起,我搞错了。我的用户标识符页面确实有
以及OpenID1.1链接。我从用户xrds文档(在第一个xml声明下)中删除了一行空白,并且我能够成功登录!我将该行添加回以进行验证,它停止工作。再次移除该线路不再有效。我正在尝试调试DotNetOpenAuth依赖方代码,但出现以下错误:
无法加载文件或程序集“DotNetOpenAuth.OpenId”或其依赖项之一。无法验证强名称签名
。我发现有人建议我先运行“sn-Vr*,2780CCD10D57B246”,我确实运行了,但随后出现了错误“无法打开注册表项”。除非您自己构建DNOA,否则不应该出现签名错误(这通常是不必要的)。至于成功、失败、然后仍然失败的场景,您可能正在经历发现缓存。我在回答中添加了说明如何在测试期间关闭该选项。这对我不起作用。我们已将cacheDiscovery设置为false,并已尝试从XRD中删除任何空白。此外,您是否可以更新指向文档的链接?我ts a 404。关于修复此问题的任何其他建议@AndrewArnott?事实证明,用户标识url在表单身份验证配置中受到保护,从而阻止了用户标识的成功发现。