2009-09-04 18 views
8

您可能以前解決過這個問題。如何在會話較少的負載平衡環境中配置dotNetOpenId

我需要能夠在沒有會話粘性的環境中使用開放標識。服務器確實保存了標題。

我正在使用ASP.NET MVC和dotNetOpenId版本3.2.0.9177。儘管在返回響應時,第三方網站上的身份驗證沒有問題,但出現錯誤,身份驗證失敗。

有什麼想法?

回答

6

有狀態

最優化的方法是編寫自定義持久性存儲實現IRelyingPartyApplicationStore的「祕訣」是的OpenID RP的需要,以及您的實例傳遞給OpenIdRelyingParty(IRelyingPartyApplicationStore)構造,或在其註冊的web.config file

無國籍

一個更容易的解決方案,能夠滿足大多數情況下是使用無狀態的模式,而不是,所以沒有狀態需要跨Web場的服務器共享。

您可以通過實例化OpenIdRelyingParty來激活無狀態模式,將null作爲您的應用商店實例。調用默認的構造函數將導致DNOA使用其在內存中的存儲,這在服務器場中斷,所以默認的構造函數不足。

或者,如果您使用ASP.NET控件,只需在控件上設置Stateless = true即可。

+0

謝謝。無國籍的部分似乎已經修復了它。 – 2009-09-07 10:13:16

1

使用DotNetOpenID,您應該能夠在通過cookie向客戶端進行身份驗證期間保持您需要的狀態。

編輯:我沒有任何示例代碼,因爲我從來不必在無會話的環境中使用DotNetOpenID,但我會檢查此鏈接,它可能會提供您需要的信息: http://code.google.com/p/dotnetopenid/wiki/WebFarmHowto

+0

我已經使用類似的東西在TempData中的東西,但DotNetOpenID的任何代碼示例?我還不熟悉它。謝謝 – 2009-09-04 17:11:09

+0

我手邊沒有任何代碼示例,但請查看我提供的鏈接。 – mkchandler 2009-09-04 18:18:21

4

下面是我們如何使無狀態模式:

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

似乎工作至今,雖然每安德魯有一個小的性能損失。由於登錄是一項相當少見的活動,因此不確定這一點。

+0

這個三參數構造函數適用於DotNetOpenId 2.x,而無狀態模式的一個參數構造函數適用於DotNetOpenAuth 3.x. – 2009-10-16 01:09:17

+0

感謝Coding Horror先生/ Stackoverflow的創造者之一。我會在星期一上午嘗試。 – 2009-10-23 17:04:01

相關問題