Question

J'ai un site MVC ASP.NET avec un serveur CAS configuré comme type d'authentification. J'ai également une base de données distincte avec une table d'utilisateurs et un tableau des rôles (avec un utilisateur lié à un ou plusieurs rôles). Un utilisateur ne peut se connecter au système que si le nom d'utilisateur est à la fois dans la table utilisateur et sur le système CAS. J'ai cette solution qui fonctionne.

Mon problème est que j'ai maintenant besoin d'une forme de déclencheur sur l'utilisateur. Isauthenticated afin que je puisse suivre l'utilisateur actuel (à partir de ma base de données), sans la possibilité que j'essaie d'autoriser le suivi d'un utilisateur qui s'est déconnecté. Ce à quoi je pensais, c'est que je dois ajouter l'utilisateur au HTTPContext, mais je ne sais pas comment déclencher la compensation de l'utilisateur si la session CAS met en temps ou si l'utilisateur se connecte.

Je souhaite également avoir des fonctionnalités telles que user.isinrole (à nouveau en utilisant ma base de données, pas ASP.NET), mais je ne sais pas comment y mettre en œuvre. Je suppose que si je peux ajouter avec succès l'utilisateur au HTTPContext, une méthode isInrole serait simplement une méthode utilisateur.ROLE.CONTAINS (String Role), mais comment peut-on être utilisée si je souhaite, par exemple, d'utiliser une méthode avec la méthode avec la méthode avec la méthode avec la méthode avec la méthode avec la méthode avec la méthode Dataannotation [Authorize (Role = "Examplerole")].

J'ai regardé des questions telles que Comment créer un fournisseur d'adhésion personnalisé pour ASP.NET MVC 2? Mais cela ne fonctionne pas pour moi (peut-être à faire avec moi en utilisant l'authentification CAS?)

Toute indication ou lecture de fond serait appréciée car je ne sais vraiment pas par où je devrais même commencer. J'ai lu sur GenericPrinciple, iPrinciple et Identity, mais j'ai du mal à voir comment je peux les appliquer à mon projet actuel.

Était-ce utile?

La solution

S'est retrouvé avec un attribut d'autorisation personnalisé qui utilise la connexion CAS pour vérifier que l'utilisateur existe dans ma base de données. Il vérifie également les rôles de cet utilisateur. J'ai également utilisé une classe statique pour enregistrer l'utilisateur actuel dans la session avec une méthode de déconnexion qui abandonne la session lorsque l'utilisateur se déconnecte.

Autres conseils

J'ai une sorte de parter à deux pour vous. Ce lien fait un très bon travail pour expliquer comment remplacer l'utilisateur httpcontext par votre propre objet: http://bradygaster.com/custom-authentication-with-mvc-3.0

Son approche utilise des filtres MVC, mais vous pouvez également assister à l'événement d'authentification dans le fichier global.asax. L'utilisation du système Forms avec votre propre implémentation peut être triviale ou ne pas en fonction de ce que vous faites, mais cela se résume à l'appel FormsAuthentication.setAuthCookie et .Signout, au milieu de votre propre logique.

   public static void FormsLogin(this User user, bool persist)
    {
        FormsAuthentication.SetAuthCookie(user.DisplayName, persist);
        user.AddHistory("Login event.", HistoryType.Login, "SYSTEM");
        Users.OnUserLogin(user);
        SetLastActivity(user);
    }

    public static void FormsLogout(this User user)
    {
        FormsAuthentication.SignOut();
    }

Enfin, une fois que vous avez fonctionné les éléments de connexion, vous pouvez utiliser votre propre système d'autorisation plus complexe en créant un attribut d'auto personnalisé. Je me souviens de reconstituer ceci à partir d'autres réponses et articles, mais je n'arrive pas à trouver les sources pour le moment, je vais essayer de modifier des sources de crédit où elle est due, si je les trouve. Pour l'instant, tout ce que je peux offrir, c'est ce gist qui offre l'un des attributs que j'utilise: https://gist.github.com/1959509

Gardez à l'esprit la seule partie vraiment pertinente qu'il y a le remplacement de l'on automorisation, qui fait le travail réel.

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