我遇到了使用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();
答案 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>