6

J'essaie de déterminer la meilleure façon d'exécuter du code une fois qu'un utilisateur s'est authentifié en utilisant OpenID Connect sur une application Dotnet Core MVC. Je ne veux pas coder en dur une URL de redirection après la connexion, car ils doivent toujours se retrouver là où ils essayaient d'accéder après l'authentification. J'ai juste besoin d'exécuter du code, par exemple. "vérifiez si c'est la première fois que vous vous connectez et mettez un drapeau" ou quelque chose de similaire. J'utilisais un middle-ware mais comme cela est appelé pour chaque requête, cela cause quelques problèmes.Exécutez le code après la connexion openid connect dans Asp.net Core

Est-ce que quelqu'un a des idées sur la façon d'y parvenir?

+0

Comment allez-vous avec cela? J'ai exactement la même exigence, mais je n'ai pas été en mesure de trouver une solution appropriée ion encore. J'ai posté une question similaire (https://stackoverflow.com/questions/45618386/how-to-redirect-after-azure-ad-authentication-to-different-controller-action-in) – OjM

+0

Comment avez-vous résolu le problème? problème? J'ai exactement le même problème. – TejSoft

+0

Vous devriez avoir une méthode qui génère votre jeton api ... il suffit d'appeler une méthode là-bas une fois le processus d'authentification terminé et avoir un drapeau dans la table des utilisateurs comme AccountNeverLoggedIn ... –

Répondre

0

Je crois que ce type de réacheminement sélectif devrait être effectué dans une classe héritant de AuthorizeAttribute; De nombreuses actions de préambule peuvent être prises, y compris l'application de contextes de rôles supplémentaires. Un exemple est la lecture et l'acceptation des termes et conditions, qui doivent être effectuées une fois pour un identifiant de connexion (lire Utilisateur). Cela peut être effectué par une redirection vers un contrôleur MVC protégé inférieur. Une fois accepté le rôle "TandC_Consent" (ou tout autre rôle) peut être appliqué à l'utilisateur, et l'utilisateur peut être redirigé vers un contrôleur qui valide en utilisant [AuthorizePermission("TandC_Consent")] chaque fois après.

This github example montre comment implémenter l'instance AuthorizeAttribute et le décorateur [AuthorizePermission()].

0

Je cherchais aussi comment le faire et j'ai enfin utilisé IdentityServer3. Il y a l'interface IUserService qui définit certaines méthodes que vous pouvez surcharger. L'une de ces méthodes est PostAuthenticateAsync De la documentation IdentityServer3:

Cette méthode est appelée après que l'utilisateur a authentifié avec succès mais avant le retour à l'application cliente. Il permet à un lieu consolidé de vérifier les flux de travail utilisateur personnalisés après toutes les autres méthodes d'authentification . Il est conçu pour les flux de travail de l'interface utilisateur. Passé un PostAuthenticationContext avec les propriétés suivantes: SignInMessage: Les informations contextuelles transmises au point de terminaison autorisent. AuthenticateResult: AuthenticateResult en cours. Le service utilisateur peut réaffecter à une valeur non nulle pour modifier le résultat d'authentification .

Le paramètre context a AuthenticateResult propriété qui peut être réglé à un résultat d'authentification personnalisé:

public override Task PostAuthenticateAsync(PostAuthenticationContext context) 
{ 
    // code that will determine target url 
    // redirectPath = ... 
    context.AuthenticateResult = AuthenticateResult(redirectPath, claims); 
} 

redirectPath doit commencer par/ou ~/»

Voici un example de IUSerService mise en œuvre.