【问题标题】:How to configure dotNetOpenId in an session less load balancing environment如何在无会话负载平衡环境中配置 dotNetOpenId
【发布时间】:2009-09-04 13:11:38
【问题描述】:

你可能以前解决过这个问题。

我需要能够在没有会话粘性的环境中使用 open id。服务器确实保留了标头。

我正在使用 ASP.NET MVC 和 dotNetOpenId 版本 3.2.0.9177。尽管在返回响应时第 3 方网站上的身份验证顺利进行,但我收到错误并且身份验证失败。

有什么想法吗?

【问题讨论】:

    标签: asp.net-mvc load-balancing dotnetopenauth


    【解决方案1】:

    有状态

    最优化的方法是为 OpenID RP 所需的“秘密”编写一个实现 IRelyingPartyApplicationStore 的自定义持久性存储,并将您的实例传递给 OpenIdRelyingParty(IRelyingPartyApplicationStore) 构造函数,或将其注册到您的 web.config file

    无状态

    适用于大多数情况的更简单的解决方案是改用无状态模式,这样就不需要在您的网络场的服务器之间共享任何状态。

    您可以通过实例化OpenIdRelyingParty 来激活无状态模式,并将null 作为您的应用商店实例传入。调用默认构造函数将导致 DNOA 使用其内存存储,这会在服务器场上中断,因此默认构造函数是不够的。

    或者,如果您使用的是 ASP.NET 控件,只需在控件上设置 Stateless = true

    【讨论】:

    • 谢谢。无状态部分似乎已经修复了它。
    【解决方案2】:

    以下是我们启用无状态模式的方式:

    var uri = new Uri(Request.Url, Request.RawUrl);
    var openid = new OpenIdRelyingParty(null, uri, 
                 Request.HttpMethod == "GET" ? Request.QueryString : Request.Form);
    

    到目前为止似乎工作正常,尽管根据 Andrew 的说法,性能受到了一点影响。不确定这是否重要,因为登录是一种相当罕见的活动。

    【讨论】:

    • 这个三参数构造函数适用于DotNetOpenId 2.x,而无状态模式的一参数构造函数适用于DotNetOpenAuth 3.x。
    • 感谢 Coding Horror 先生/stackoverflow 的创造者之一。我会在星期一早上试试。
    【解决方案3】:

    使用 DotNetOpenID,您应该能够通过 cookie 将身份验证期间所需的状态保持到客户端。

    编辑:我没有任何示例代码,因为我从未在无会话环境中使用 DotNetOpenID,但我会查看此链接,它可能提供您需要的信息:http://code.google.com/p/dotnetopenid/wiki/WebFarmHowto

    【讨论】:

    • 我使用了类似的东西来保存 TempData 中的东西,但是有 DotNetOpenID 的代码示例吗?我还不熟悉它。谢谢
    • 我手头没有任何代码示例,但请查看我提供的链接。
    猜你喜欢
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 2015-08-02
    相关资源
    最近更新 更多