没有用户发现的DotNetOpenAuth请求

时间:2013-06-17 06:05:51

标签: .net asp.net-mvc-3 c#-4.0 openid dotnetopenauth

我遇到了使用ASP.Net(MVC)和DotNetOpenAuth库进行OpenId登录的问题。 我必须连接的OpenId提供程序为OP发现和用户发现请求提供相同的(静态)响应。 因此,DotNetOpenAuth库总是告诉我,验证失败了。 提供商告诉我禁用用户发现请求。

任何人都可以通过DotNetOpenAuth帮助我如何做到这一点? 我还没有找到任何解决方案。

这是我连接OpenId提供程序的方式:

var providerUrl= ConfigurationManager.AppSettings["OpenIdUrl"];
IAuthenticationRequest request = openId.CreateRequest(Identifier.Parse(providerUrl)); 
return request.RedirectingResponse.AsActionResult();

1 个答案:

答案 0 :(得分:0)

感谢您研究失败原因并与OP沟通。这应该会让事情变得更快。 OP运算符的OP配置错误。从OpenID 2.0规范第11.2节,我们读到:

  

如果声明中包含声明的标识符,则它必须具有   被依赖方发现的信息和信息   断言必须出现在已发现的信息中。声称   标识符绝不能是OP标识符。

从最后一句,我们得到从用户标识符返回的“静态”XRDS不能是OP标识符,但它是,并且从规范中的其他地方我们知道OP标识符优先于用户标识符(这就是禁止在这里使用OP标识符的原因)。 OP应该修复从用户标识符返回的XRDS文档,以省略OP Identifier服务端点。

请将上述内容转发给任何有缺陷的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>