2009-09-21 8 views
5

Je suis en train de créer une application qui utilise <autorisation> règles pour limiter les groupes qui sont autorisés à accéder à l'application. J'utilise l'authentification Windows et le fournisseur de rôle Windows pour ASP.NET (AspNetWindowsTokenRoleProvider). J'utilise des groupes locaux pour définir les rôles, comme le domaine sur lequel je développe, et le domaine vers lequel l'application sera éventuellement déployée sera différent. Lorsque j'ai initialement déployé mon application sur un serveur IIS7 et configuré le site pour utiliser l'authentification de base avec le domaine par défaut approprié, tout fonctionnait correctement pour les utilisateurs déjà affectés aux groupes autorisés. Cependant, lorsque j'ai tenté d'ajouter un nouvel utilisateur à l'un des groupes autorisés, cet utilisateur n'a jamais été autorisé à accéder à l'application. J'ai tout fait sauf pour redémarrer la machine. J'ai redémarré IIS ainsi que supprimé tous les fichiers temporaires et les cookies du côté client, en vain.ASP.NET de Windows fournisseur de rôles (AspNetWindowsTokenRoleProvider) ne pas avoir remarqué un utilisateur ajouté à un nouveau groupe

Il convient de préciser qu'il s'agit d'une application ASP.Net MVC, même si je ne pensais pas que cela ferait vraiment une différence. Voici les entrées pertinentes de mon web.config:

<!-- use windows authentication --> 
<authentication mode="Windows" /> 

<!-- use the Windows role provider -->  
<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider" /> 

<!-- global authorization rules --> 
<authorization> 
    <allow roles="admins,contractors"/> 
    <deny users="*" /> 
</authorization> 

Par exemple, disons que nous avons un utilisateur, un groupe « Domain \ joe », ce n'est pas actuellement membre des « admins » locaux, mais nous vouloir l'ajouter. Nous allons l'ajouter, et quand Joe tente de se connecter, il voit une erreur qu'il n'est pas authentifié (après plusieurs tentatives de connexion échouées). Aucune quantité d'IIS ne redémarre ou que Joe supprime ses cookies et d'autres fichiers temporaires pour résoudre ce problème.

ASP.Net conserve-t-il une sorte de cache de rôle/groupe secret? Comment allez-vous ajouter un nouvel utilisateur à un groupe et vous assurer que le fournisseur de rôle verra que l'utilisateur a été ajouté à un groupe?

+1

Vous devriez publier ce commentaire comme réponse et l'accepter afin qu'il soit clair pour les autres utilisateurs qu'il est résolu. –

Répondre

5

Il semble qu'il y ait un délai entre le moment où un utilisateur est ajouté ou retiré d'un groupe et le moment où IIS va détecter le changement. Il existe une valeur de registre que vous pouvez définir pour modifier la durée de mise en cache des jetons d'authentification utilisateur ou désactiver la mise en cache de tous les jetons. Toutefois, la modification de cette valeur (UserTokenTTL) semble n'avoir aucun impact sur le temps pris par IIS pour réaliser qu'un utilisateur a été ajouté à un groupe. La page suivante contient plus d'informations sur la clé de registre UserTokenTTL: http://support.microsoft.com/kb/954864

+0

Vous avez sauvé mes fesses. : DI a dû se déconnecter, puis se reconnecter pour que IIS sélectionne la bonne configuration de groupe, c'est-à-dire, reconnaisse l'utilisateur que je lui ai ajouté et permet à une action ASP.NET MVC de s'exécuter avec une autorisation basée sur les utilisateurs de ce groupe. Je devenais fou parce qu'il ne permettait pas à l'utilisateur d'exécuter cette action et l'utilisateur appartenait bien sûr au groupe. :) –

Questions connexes