8

你以前可能已经解决了这个问题。

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

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

有什么想法吗?

4

3 回答 3

6

有状态的

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

无状态

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

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

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

于 2009-09-04T21:31:34.707 回答
5

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

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

到目前为止似乎工作,虽然每个安德鲁有一个小的性能影响。不确定这是否重要,因为登录是一项相当罕见的活动。

于 2009-10-15T18:21:25.977 回答
1

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

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

于 2009-09-04T14:32:31.993 回答