2010-11-25 5 views
3

Contexte:IIS6 et IIS7 forme compatibilité auth

J'ai deux applications web, mis en place sur les différents serveurs web, qui sont actuellement à la fois IIS6. L'application 1 (A1 - a1.domain.com) utilise le cookie d'authentification de formulaires défini par l'application 2 (A2 - a2.domain.com).

En A1 web.config je:

<authentication mode="Forms"> 
<forms name=".ASPXAUTH" domain="domain.com" protection="All" path="/" loginUrl="http://a2.domain.com/login.aspx" timeout="60" /> 
</authentication> 

Dans A2 web.config je:

<authentication mode="Forms"> 
<forms name=".ASPXAUTH" domain="domain.com" protection="All" path="/" loginUrl="login.aspx" timeout="60" /> 
</authentication> 

Ces deux applications partagent également des valeurs machineKey dans web.config

Cela fonctionne parfaitement sans aucun problème.

Problème:

Je suis mise à niveau A1 à utiliser .NET 4.0 et exécuter dans IIS7, et maintenant l'authentification des formulaires partagés ne fonctionne pas. Je suis toujours redirigé vers la page de connexion correcte sur A2 et je peux voir qu'il définit le cookie auth, mais quand je retourne à A1 l'authentification échoue avec l'erreur suivante (de l'Observateur d'événements):

Forms échec de l'authentification pour la demande. Raison: Le ticket fourni était invalide.

J'ai essayé:

  • Mise en place version améliorée de A1 à IIS6 (cela a fonctionné - donc pas de problèmes de compatibilité entre les formes auth dans différentes versions .NET dans IIS6)

  • Mise en place A1 amélioré en utilisant un IIS7-à-dire la page d'ouverture de session locale copié page de connexion de A2 en A1 et A1 définir loginUrl = "login.aspx" (fonctionne également)

Cela m'a laissé deviner qu'il y a un problème de compatibilité causé par le cookie auth en cours de création sous un site IIS6 utilisé pour authentifier les utilisateurs sous un site IIS7.

Est-ce que quelqu'un sait comment résoudre ce problème?

Répondre

2

Dans .NET 4.0, la façon dont les tickets d'authentification sont cryptés a changé. Si vous voulez être compatible avec les anciennes versions, vous pouvez définir l'attribut ticketCompatibilityMode comme ceci:

<forms 
    loginUrl="/Login.aspx" 
    timeout="2880" 
    ticketCompatibilityMode="Framework20" 
    domain="domain.com" 
/> 
+0

Merci, mais malheureusement, cela n'a pas fonctionné. Je ne pense pas que je vois des problèmes de compatibilité entre 2.0 et 4.0 car j'ai installé A1 dans IIS6 sur le même serveur que A2 (mais en utilisant des versions différentes de .NET) et j'ai trouvé que cela fonctionne. La seule fois où cela ne fonctionne pas, c'est quand il est sur deux serveurs, un avec IIS6 et un avec IIS7 indépendamment des versions .NET. – Chris

+2

Le cookie d'authentification n'est pas créé par IIS mais par ASP.NET. La raison pour laquelle cela ne fonctionne peut-être pas parce que vous n'avez pas les mêmes clés machine, le 'ticketCompatibilityMode' dans .NET 4.0 et enfin le dernier patch publié par Microsoft sur la vulnérabilité Oracle Padding dans ASP.NET: si vous l'avez installé seulement sur un serveur et pas sur l'autre, il pourrait poser des problèmes. –

+1

L'installation du correctif de sécurité sur ma machine locale semble avoir fait l'affaire. En lisant les informations sur le ticketCompatibilityMode, il semble que cela fera une différence en ce qui concerne l'expiration des cookies. Merci Darin! – Chris

Questions connexes