none
Authentification et roles RRS feed

  • Question

  • Bonjour,

    j'ai une application où nous gérons une partie de notre sécurité avec les roles et les web.config :

    <configuration>

        <locationpath="RoleAutorise.aspx">

        <system.web>

          <authorization>

            <allowroles="AdministrateurPrincipal"/>

            <denyusers="*"/>

          </authorization>

        </system.web>

      </location>

      <locationpath="RoleNonAutorise.aspx">

        <system.web>

          <authorization>

            <allowroles="AdministrateurSecondaire"/>

            <denyusers="*"/>

          </authorization>

        </system.web>

      </location>

    </configuration>

    Mon authentification utilise cette form.

    <authenticationmode="Forms"><formsloginUrl="~/Account/Login.aspx" defaultUrl="~/Default.aspx"name="compte"  /></authentication>

    Il nous faut maintenant implémenter nos roles sachant qu'ils sont déduits de notre SI

    J'ai vu deux façons pour le faire

    Méthode 1 : faire un RoleProvider personnel

    <roleManagerenabled="true"defaultProvider="DispositifRoleProvider">

          <providers>

            <clear/>

            <addname="DispositifRoleProvider"type="WebApplication1.DispositifRoleProvider"applicationName="/"/>

          </providers>

    </roleManager>

     Method 2: utiliser Application_PostAuthenticateRequest in Global.asax pour définir les roles

    protected voidApplication_PostAuthenticateRequest(Objectsender, EventArgse)

    {

    if(HttpContext.Current.User != null)

                {

    if(HttpContext.Current.User.Identity.IsAuthenticated)

                        {

                           if(HttpContext.Current.User.Identity isFormsIdentity)

                            {  FormsIdentityid = (FormsIdentity)HttpContext.Current.User.Identity;

    FormsAuthenticationTicketticket = id.Ticket;

    stringuserData = ticket.UserData;

    string[] roles = userData.Split(',');

    HttpContext.Current.User = Thread.CurrentPrincipal = newGenericPrincipal(HttpContext.Current.User.Identity, roles);

     }

     }

     }

    Quand je passe dans cette méthode, l'objet Session n'est toujours pas disponible. Donc soit j'utilise le même mécanisme de cookie pour le role ou un autre accès.

    Mes questions et mes interrogations :
    1 - quelle est la méthode à utiliser (la "best practice") ou du moins celle que vous utilisez ? Application_PostAuthenticateRequest ou définition d'un nouveau provider.
    2 - pour récupérer mon role, faut-il mieux utiliser un TicketAuthentification ou un accès en base pour récuperer le profil de mon utilisateur ou autre.

    Dans ma problématique 1, j'ai remarqué que pour tout demande (css, image) je passe Application_PostAuthenticateRequest alors qu'il me semble que mon provider n'est utilisé que lorsque dotNet veut utiliser le role.

    Par avance merci


    mercredi 19 décembre 2012 17:09

Réponses

Toutes les réponses