你以前可能已经解决了这个问题。
我需要能够在没有会话粘性的环境中使用open id。服务器确实保留了标题。
我正在使用ASP.NET MVC和dotNetOpenId版本3.2.0.9177。虽然第三方网站上的身份验证在返回响应时顺利进行但我收到错误并且身份验证失败。
有什么想法吗?
答案 0 :(得分:6)
<强>有状态强>
最优化的方法是编写一个自定义持久性存储,为OpenID RP所需的“秘密”实现IRelyingPartyApplicationStore
,并将您的实例传递给OpenIdRelyingParty(IRelyingPartyApplicationStore)
构造函数,或在{ {3}}
<强>无国籍强>
对于大多数情况来说,更简单的解决方案是使用无状态模式,这样就不需要在Web场的服务器之间共享任何状态。
您可以通过实例化OpenIdRelyingParty
作为应用商店实例传递null
来激活无状态模式。调用默认构造函数将导致DNOA使用其内存存储,该存储在服务器场中断,因此默认构造函数不足。
或者,如果您使用的是ASP.NET控件,只需在控件上设置Stateless = true
即可。
答案 1 :(得分:5)
以下是我们如何启用无状态模式:
var uri = new Uri(Request.Url, Request.RawUrl);
var openid = new OpenIdRelyingParty(null, uri,
Request.HttpMethod == "GET" ? Request.QueryString : Request.Form);
到目前为止似乎工作,但每个安德鲁的表现都很小。由于登录是一项非常罕见的活动,因此不确定是否重要。
答案 2 :(得分:1)
使用DotNetOpenID,您应该能够通过cookie将身份验证期间所需的状态保留到客户端。
编辑:我没有任何示例代码,因为我从来没有在无会话环境中使用DotNetOpenID,但我会查看此链接,它可能会提供您需要的信息:http://code.google.com/p/dotnetopenid/wiki/WebFarmHowto