3

J'ai un site Web sur lequel je travaille et qui comporte un déploiement intranet et Internet. La seule différence entre les 2 est un couple de paramètres de configuration.Authentification par formulaires via l'authentification Windows

La version Internet fonctionne correctement car elle utilise simplement l'authentification par formulaire (qui est définie dans sa configuration Web) et si elle n'est pas connectée, l'utilisateur est dirigé vers une page de connexion. La version intranet est un peu plus compliquée ... quand un utilisateur accède au site pour la première fois, l'objet du principe http est correctement défini avec WindowsPrincipal, mais en utilisant cette information, je confirme que l'utilisateur est autorisé à accéder à l'application, puis Je crée ma propre instance IPrinciple. Etant donné cela, il y a quelques choses que je veux faire ici ... Je veux utiliser l'objet WindowsPrincipal comme base pour authentifier l'utilisateur, mais à partir de là utiliser l'authentification par formulaire (ie utiliser un cookie pour stocker les détails d'authentification, etc.). J'ai aussi besoin de l'instance du principe que je récupère du contexte HTTP pour être de mon type IPrinciple.

Comment est-ce que je peux le faire? Comme dans je devrais regarder le Session_Start de global.asax pour exécuter la logique d'autorisation et ensuite l'obtenir pour stocker mon IPrinciple personnalisé (ainsi pour toute demande après ce point l'instance est mon principe personnalisé) ou suis-je mieux de faire quelque chose avec Application_AuthenticateRequest .

Vive Anthony

Répondre

2

Évitez l'objet de session pour cela. Application_AuthenticateRequest est où vous voulez être. Dans là, vous pouvez prendre le WindowsPrincipal, puis aller à la base de données pour remplir votre propre objet implémentant IPrincipal personnalisé. Cela signifie que Application_AuthenticateRequest est beaucoup appelé, donc dans mes applications, j'ai tendance à mettre en cache les données de rôle pendant au moins quelques secondes pour réduire les allers-retours de base de données. Cela fonctionne également avec l'authentification par formulaire. La seule différence entre les deux méthodes est que dans le scénario Forms, vous obtenez un GenericPrincipal à partir du module d'authentification Forms, et vous l'utiliseriez pour extraire votre propre objet principal personnalisé au lieu de WindowsPrincipal. Un autre résultat de la définition de HttpContext.Current.User dans Application_AuthenticateRequest est que, contrairement à si vous placez votre principal dans l'objet Session, vous pouvez utiliser la sécurité déclarative, telle que la décoration de vos méthodes avec PrincipalPermissionAttribute.

+0

Pourriez-vous s'il vous plaît répondre http://stackoverflow.com/questions/9588265/understanding-wcf-windows-authentication? – Lijo