我尝试使用DotNetOpenAuth实现OpenID提供程序。我提供了一个OpenID网址,消费者会发现我的端点。
我登录我的提供商,提供商向消费者返回一个声明的标识符和一个本地标识符。
但消费者的反应有以下例外:
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
是我的用户标识符网址,我可以成功浏览到它。它有一个指向标题中端点的链接,如下所示:
<link rel="openid.server" href="http://localhost/OpenIDAuth.aspx"></link>
无论我尝试什么,&#34;发现的端点信息:[]&#34;异常的一部分总是一个空数组。
有人可以帮忙吗?
答案 0 :(得分:2)
令人费解的是,你到目前为止,因为看到这个错误要么RP必须能够在重定向到提供者之前成功完成发现阶段(在这种情况下为什么它会第二次失败)或者这是一个未经请求的断言(这很好,但很不寻常)。
但我看到的一个缺陷就是你的标签:
<link rel="openid.server" href="http://localhost/OpenIDAuth.aspx"></link>
是OpenID 1.1的广告,而您的提供商声明OpenID 2.0。 IIRC,正确的标签是:
<link rel="openid2.provider" href="http://localhost/OpenIDAuth.aspx"></link>
并提示:当您开发提供程序并使用DotNetOpenAuth RP进行测试时,请确保将RP(也可能是OP)设置为不将发现结果缓存到web.config中,以便您知道成功和失败实际上是您目前的代码:
<dotNetOpenAuth>
<openid cacheDiscovery="false">
您可以看到更多配置选项以及上述xml显示的上下文in the docs。