2009-09-04 6 views
8

Vous l'avez probablement déjà résolu.Comment configurer dotNetOpenId dans un environnement sans équilibrage de charge de session

Je dois être en mesure d'utiliser l'ID ouvert dans un environnement qui n'a pas d'adhérence de session. Les serveurs conservent les en-têtes. J'utilise ASP.NET MVC et dotNetOpenId version 3.2.0.9177. Bien que l'authentification sur le site Web de la tierce partie se passe sans problème lors du renvoi de la réponse, j'obtiens une erreur et l'authentification échoue.

Des pensées?

Répondre

6

Stateful

la méthode la plus optimisée est d'écrire un magasin de persistance personnalisée qui implémente IRelyingPartyApplicationStore pour les « secrets » qu'OpenID RPs besoin, et passez votre instance au constructeur OpenIdRelyingParty(IRelyingPartyApplicationStore), ou enregistrez-vous dans votre web.config file.

Stateless

Une solution beaucoup plus facile qui suffit pour la plupart des scénarios est d'utiliser le mode sans état à la place, de sorte qu'aucun Etat doit être partagé entre les serveurs de votre batterie web.

Vous pouvez activer le mode sans état en instanciant OpenIdRelyingParty en indiquant null en tant qu'instance de magasin d'applications. L'appel du constructeur par défaut entraînera DNOA à utiliser son magasin en mémoire, qui se brise sur les batteries de serveurs, de sorte que le constructeur par défaut est insuffisant. Si vous utilisez les contrôles ASP.NET, définissez Stateless = true sur le contrôle.

+0

Merci. La partie sans état semble l'avoir réparée. –

1

En utilisant DotNetOpenID, vous devriez pouvoir conserver l'état dont vous avez besoin pendant l'authentification au client via un cookie.

Edit: Je n'ai pas de code d'exemple pour cela parce que je ne l'ai jamais eu à utiliser DotNetOpenID dans un environnement de session moins, mais je voudrais vérifier ce lien, il peut fournir les informations dont vous avez besoin: http://code.google.com/p/dotnetopenid/wiki/WebFarmHowto

+0

J'ai utilisé quelque chose de similaire pour contenir quelque chose dans TempData, mais des exemples de code pour le DotNetOpenID? Je ne le connais pas encore. Merci –

+0

Je n'ai pas d'exemples de code en main, mais vérifiez le lien que j'ai fourni. – mkchandler

4

Voilà comment nous permettons en mode sans état:

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

semble fonctionner jusqu'à présent, mais par Andrew il y a une petite baisse de performance. Pas sûr que cela compte depuis la connexion est une activité assez rare.

+0

Ce constructeur à trois paramètres est approprié pour DotNetOpenId 2.x, alors que le constructeur à un paramètre pour le mode sans état convient à DotNetOpenAuth 3.x. –

+0

Merci M. codage horreur/un-des-créateurs-de-stackoverflow. Je vais essayer lundi matin. –

Questions connexes