2009-09-04 12 views
8

Probabilmente lo hai già risolto.Come configurare dotNetOpenId in una sessione meno ambiente di bilanciamento del carico

Devo essere in grado di utilizzare l'id aperta in un ambiente che non ha stickiness di sessione. I server mantengono le intestazioni.

Sto usando ASP.NET MVC e dotNetOpenId versione 3.2.0.9177. Sebbene l'autenticazione sul sito Web di terze parti non abbia problemi durante la restituzione della risposta, viene visualizzato un errore e l'autenticazione non riesce.

Qualche idea?

risposta

6

Stateful

il metodo più ottimizzato è quello di scrivere un negozio di persistenza personalizzato che implementa IRelyingPartyApplicationStore per i "segreti" che OpenID RP richiedono, e passa l'istanza al costruttore OpenIdRelyingParty(IRelyingPartyApplicationStore), o registrarlo nel vostro web.config file.

Stateless

Una soluzione molto più semplice che sarà sufficiente per la maggior parte degli scenari è quello di utilizzare la modalità senza stato, invece, in modo che nessuno Stato deve essere condivisa tra i server vostro web della fattoria.

È possibile attivare la modalità senza stato istanziando OpenIdRelyingParty passando null come istanza dell'archivio dell'applicazione. Chiamando il costruttore predefinito, DNOA utilizzerà il suo archivio in memoria, che si interrompe sulle server farm, quindi il costruttore predefinito è insufficiente.

O se si utilizzano i controlli ASP.NET, è sufficiente impostare Stateless = true sul controllo.

+0

Grazie. La parte senza stato sembra averlo risolto. –

1

Utilizzo di DotNetOpenID, dovresti essere in grado di mantenere lo stato di cui hai bisogno durante l'autenticazione al client tramite un cookie.

Edit: io non ho alcun codice di esempio per questo, perché non ho mai dovuto usare DotNetOpenID in un ambiente sessione di meno, ma vorrei controlla questo link, si può fornire le informazioni necessarie: http://code.google.com/p/dotnetopenid/wiki/WebFarmHowto

+0

Ho usato qualcosa di simile per contenere qualcosa in TempData, ma qualche esempio di codice per DotNetOpenID? Non ho ancora familiarità con questo. Grazie –

+0

Non ho esempi di codice a portata di mano, ma controlla il link che ho fornito. – mkchandler

4

Ecco come stiamo consentendo modalità stateless:

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

sembra funzionare finora, anche se per Andrew c'è un piccolo calo di prestazioni. Non sono sicuro che importi dal momento che il login è un'attività abbastanza rara.

+0

Questo costruttore di tre parametri è appropriato per DotNetOpenId 2.x, mentre il costruttore di un parametro per la modalità senza stato è adatto per DotNetOpenAuth 3.x. –

+0

Grazie a Mr. Coding Horror/One-of-the-the-the-the-the-the-the-the-the-the-the-creator-of-stackoverflow. Ci proverò lunedì mattina. –

Problemi correlati