Quel est le meilleur moyen d'implémenter l'authentification de formulaires ASP.NET mixtes (AD + DB)?

StackOverflow https://stackoverflow.com/questions/206767

Question

Je souhaite implémenter l'authentification par formulaire sur un site Web ASP.NET. Le site doit rechercher l'utilisateur de la base de données pour obtenir des données, puis s'authentifier auprès de LDAP (Active Directory) pour valider la liste déroulante utilisateur / mot de passe.

Après cela, je dois conserver une instance de classe qui représente l'utilisateur pour l'utiliser sous différentes formes.

J'ai déjà essayé de le faire avec un contrôle de connexion, qui vérifie les conditions précédentes et effectue un AuthenticateEventArgs.Authenticated = true et place l'objet dans la session: Session [" utilisateur " ;] = authentifiéUtilisateur; , mais je ne pouvais pas synchroniser les deux (la session a expiré avant le cookie d'authentification et j'ai reçu NullReferenceExceptions lorsque les pages ont tenté d'utiliser l'objet de session obsolète).

Quel est le meilleur moyen d'y parvenir? Existe-t-il un moyen de synchroniser le délai d'expiration de la session avec la durée de vie du cookie? L'objet utilisateur doit être enregistré d'une autre manière? Ai-je manqué le point?

UPDATE: Je ne peux pas utiliser le fournisseur d’authentification Windows car le site doit être accessible de l’extérieur au réseau privé.

Était-ce utile?

La solution

J'utiliserais l'authentification Windows comme principal fournisseur d'authentification, mais jetterais ma propre persistance de base de données simple pour les informations utilisateur.

Votre méthode de session fonctionne, vous pouvez ajuster le délai de session dans IIS et le faire correspondre au délai d'expiration du cookie d'authentification.

De plus, vous pouvez faire quelque chose comme ceci dans un HTTPModule pour attraper les cas de bord (recyclage du pool d'applications, etc.) qui effacent également la session

.

Psuedocode:

if (session["user"] == null)
{
    Authentication.SignOut();
}

Cela obligerait l'utilisateur à s'authentifier.

Autres conseils

Je règle les valeurs de délai d'expiration des cookies de session et d'authentification sur la même valeur. J'utilise des fenêtres coulissantes pour mon cookie d'authentification. Je prends aussi l'habitude de ne jamais supposer que les valeurs que je récupère en dehors de la session sont non nulles avant de tenter de les utiliser. J'abstiens souvent toutes les fonctionnalités de la session dans une classe proxy contenant des propriétés fortement typées pour les valeurs que je stocke dans la session. La gestion des erreurs pour les données de session incorrectes est localisée dans le proxy.

Le stockage des informations utilisateur dans la session fonctionnera correctement. Pour synchroniser le délai d'expiration de la session et celui du cookie d'authentification, modifiez simplement votre fichier Web.config:

<sessionState timeout="XX" />
<authentication mode="Forms">
  <forms loginUrl="Login.aspx" timeout="XX" />
</authentication>

Les deux valeurs sont en minutes.

Testez nullement CHAQUE fois où vous obtenez une valeur de la session!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top