0

我在使用 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();
4

1 回答 1

0

感谢您研究失败的原因并已经与 OP 进行了沟通。这应该使事情变得更快。OP 操作员的 OP 配置不正确。从 OpenID 2.0 规范第 11.2 节,我们读到:

如果声明中包含声明的标识符,则它必须已被依赖方发现,并且声明中的信息必须存在于发现的信息中。声明的标识符不得是 OP 标识符。

从最后一句中,我们得到从用户标识符返回的“静态”XRDS 不能是 OP 标识符,但它确实是,并且从规范的其他地方我们了解到 OP 标识符优先于用户标识符(即为什么这里禁止成为 OP 标识符)。OP 应该修复他们从用户标识符返回的 XRDS 文档,以省略 OP 标识符服务端点。

请将上述内容转发给任何有问题的 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>
于 2013-06-17T14:30:35.740 回答