使用DotNetOpenAuth创建OpenID提供程序

时间:2012-09-06 16:33:58

标签: openid dotnetopenauth

我尝试使用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;异常的一部分总是一个空数组。

有人可以帮忙吗?

1 个答案:

答案 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