【问题标题】:DotNetOpenAuth request without user discovery没有用户发现的 DotNetOpenAuth 请求
【发布时间】:2013-06-17 06:05:50
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    感谢您研究失败的原因并已与 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 也能正常工作,上述免责声明适用于此方法。将此 sn-p 添加到您的 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>
    

    【讨论】:

    • 对于测试,此调整有助于解决问题。现在认证成功。但我会联系提供商并建议修复用户发现。
    猜你喜欢
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 2016-11-18
    • 2018-07-03
    • 1970-01-01
    相关资源
    最近更新 更多