1

我正在尝试使用 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,我可以成功浏览到它。它在标头中有一个指向端点的链接,如下所示: <link rel="openid.server" href="http://localhost/OpenIDAuth.aspx"></link>

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

有人可以帮忙吗?

4

1 回答 1

2

令人费解的是,您已经走到了这一步,因为要看到此错误,RP 必须能够在重定向到 Provider 之前成功完成发现阶段(在这种情况下它为什么会第二次失败),或者这是一个不请自来的断言(这很好,但不寻常)。

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

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

是 OpenID 1.1 的广告,而您的 Provider 声明的是 OpenID 2.0。IIRC,正确的标签是:

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

提示:当您开发 Provider 并使用 DotNetOpenAuth RP 对其进行测试时,请务必将 RP(也可能是 OP)设置为不在 web.config 中缓存发现结果,以便您知道成功和您当前的代码实际上是当前的故障:

<dotNetOpenAuth>
    <openid cacheDiscovery="false">

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

于 2012-09-06T21:38:47.697 回答