你以前可能已经解决了这个问题。
我需要能够在没有会话粘性的环境中使用 open id。服务器确实保留了标头。
我正在使用 ASP.NET MVC 和 dotNetOpenId 版本 3.2.0.9177。尽管在返回响应时第 3 方网站上的身份验证顺利进行,但我收到错误并且身份验证失败。
有什么想法吗?
你以前可能已经解决了这个问题。
我需要能够在没有会话粘性的环境中使用 open id。服务器确实保留了标头。
我正在使用 ASP.NET MVC 和 dotNetOpenId 版本 3.2.0.9177。尽管在返回响应时第 3 方网站上的身份验证顺利进行,但我收到错误并且身份验证失败。
有什么想法吗?
有状态的
最优化的方法是编写一个自定义持久性存储来实现IRelyingPartyApplicationStore
OpenID RP 所需的“秘密”,并将您的实例传递给OpenIdRelyingParty(IRelyingPartyApplicationStore)
构造函数,或将其注册到您的web.config 文件中。
无状态
对于大多数场景来说,一个更简单的解决方案是使用无状态模式,这样就不需要在 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);
到目前为止似乎工作,虽然每个安德鲁有一个小的性能影响。不确定这是否重要,因为登录是一项相当罕见的活动。
使用 DotNetOpenID,您应该能够在通过 cookie 向客户端进行身份验证期间保留所需的状态。
编辑:我没有任何示例代码,因为我从未在无会话环境中使用 DotNetOpenID,但我会查看此链接,它可能提供您需要的信息:http://code。 google.com/p/dotnetopenid/wiki/WebFarmHowto