您可能以前解決過這個問題。如何在會話較少的負載平衡環境中配置dotNetOpenId
我需要能夠在沒有會話粘性的環境中使用開放標識。服務器確實保存了標題。
我正在使用ASP.NET MVC和dotNetOpenId版本3.2.0.9177。儘管在返回響應時,第三方網站上的身份驗證沒有問題,但出現錯誤,身份驗證失敗。
有什麼想法?
您可能以前解決過這個問題。如何在會話較少的負載平衡環境中配置dotNetOpenId
我需要能夠在沒有會話粘性的環境中使用開放標識。服務器確實保存了標題。
我正在使用ASP.NET MVC和dotNetOpenId版本3.2.0.9177。儘管在返回響應時,第三方網站上的身份驗證沒有問題,但出現錯誤,身份驗證失敗。
有什麼想法?
有狀態
最優化的方法是編寫自定義持久性存儲實現IRelyingPartyApplicationStore
的「祕訣」是的OpenID RP的需要,以及您的實例傳遞給OpenIdRelyingParty(IRelyingPartyApplicationStore)
構造,或在其註冊的web.config file。
無國籍
一個更容易的解決方案,能夠滿足大多數情況下是使用無狀態的模式,而不是,所以沒有狀態需要跨Web場的服務器共享。
您可以通過實例化OpenIdRelyingParty
來激活無狀態模式,將null
作爲您的應用商店實例。調用默認的構造函數將導致DNOA使用其在內存中的存儲,這在服務器場中斷,所以默認的構造函數不足。
或者,如果您使用ASP.NET控件,只需在控件上設置Stateless = true
即可。
使用DotNetOpenID,您應該能夠在通過cookie向客戶端進行身份驗證期間保持您需要的狀態。
編輯:我沒有任何示例代碼,因爲我從來不必在無會話的環境中使用DotNetOpenID,但我會檢查此鏈接,它可能會提供您需要的信息: http://code.google.com/p/dotnetopenid/wiki/WebFarmHowto
我已經使用類似的東西在TempData中的東西,但DotNetOpenID的任何代碼示例?我還不熟悉它。謝謝 – 2009-09-04 17:11:09
我手邊沒有任何代碼示例,但請查看我提供的鏈接。 – mkchandler 2009-09-04 18:18:21
下面是我們如何使無狀態模式:
var uri = new Uri(Request.Url, Request.RawUrl);
var openid = new OpenIdRelyingParty(null, uri,
Request.HttpMethod == "GET" ? Request.QueryString : Request.Form);
似乎工作至今,雖然每安德魯有一個小的性能損失。由於登錄是一項相當少見的活動,因此不確定這一點。
這個三參數構造函數適用於DotNetOpenId 2.x,而無狀態模式的一個參數構造函數適用於DotNetOpenAuth 3.x. – 2009-10-16 01:09:17
感謝Coding Horror先生/ Stackoverflow的創造者之一。我會在星期一上午嘗試。 – 2009-10-23 17:04:01
謝謝。無國籍的部分似乎已經修復了它。 – 2009-09-07 10:13:16