Asp.net mvc 如何在无会话负载平衡环境中配置dotNetOpenId

Asp.net mvc 如何在无会话负载平衡环境中配置dotNetOpenId,asp.net-mvc,load-balancing,dotnetopenauth,Asp.net Mvc,Load Balancing,Dotnetopenauth,你以前可能解决过这个问题 我需要能够在没有会话粘性的环境中使用openid。服务器会保留标题 我正在使用ASP.NET MVC和dotNetOpenId版本3.2.0.9177。虽然第三方网站上的身份验证在返回响应时不会出现问题,但我收到一个错误,身份验证失败 有什么想法吗?使用DotNetOpenID,您应该能够在通过cookie对客户端进行身份验证期间保持所需的状态 编辑:我没有这方面的示例代码,因为我从未在无会话的环境中使用过DotNetOpenID,但我会查看此链接,它可能会提供您需要的

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

我需要能够在没有会话粘性的环境中使用openid。服务器会保留标题

我正在使用ASP.NET MVC和dotNetOpenId版本3.2.0.9177。虽然第三方网站上的身份验证在返回响应时不会出现问题,但我收到一个错误,身份验证失败


有什么想法吗?

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


编辑:我没有这方面的示例代码,因为我从未在无会话的环境中使用过DotNetOpenID,但我会查看此链接,它可能会提供您需要的信息:

有状态的

最优化的方法是编写一个自定义持久性存储,该存储实现OpenID RPs所需的“机密”的
IRelyingPartyApplicationStore
,并将实例传递给
OpenIdRelyingParty(IRelyingPartyApplicationStore)
构造函数,或将其注册到应用程序中

无状态

对于大多数场景来说,一个简单得多的解决方案就是使用无状态模式,这样就不需要在web场的服务器之间共享任何状态

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


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

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

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

到目前为止似乎还不错,不过根据安德鲁的说法,有一个小的性能冲击。不确定这是否重要,因为登录是一个相当罕见的活动。

我在TempData中使用了类似的东西来保存某些东西,但是有没有DotNetOpenID的代码示例?我还不熟悉。谢谢我手头没有任何代码示例,但是请查看我提供的链接。谢谢。无状态部分似乎已经修复了它。此三参数构造函数适用于DotNetOpenId 2.x,而无状态模式的单参数构造函数适用于DotNetOpenAuth 3.x。感谢Coding Horror先生/stackoverflow的创建者之一。我星期一上午试试。