2016-02-18 3 views
0

J'utilise Windows Identity Framework pour l'authentification dans mon application Web déployée sur Azure. Quand je lance l'application localement, je peux utiliser PrincipalContext pour voir si l'utilisateur est dans un groupe:Déterminez si un utilisateur connecté est membre d'un groupe AD, dans une application Web déployée sur Azure

 PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "DOMAIN"); 

     // find a user 
     UserPrincipal user = UserPrincipal.FindByIdentity(ctx, username); 

     // find the group in question 
     GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, "GROUP-NAME"); 

     if (user != null) 
     { 
      // check if user is member of that group 
      return user.IsMemberOf(group);     
     } 

Cela fonctionne localement, mais ne fonctionne pas dans l'application déployée à Azure. Je ne suis pas sûr de savoir comment vérifier cette information maintenant. J'ai vu que le protocole LDAP n'est pas pris en charge dans Azure, c'est pourquoi cela ne fonctionne pas, mais je ne suis pas sûr de la bonne façon d'y parvenir maintenant. J'ai lu un peu à propos des réclamations de groupe, des rôles d'application et de l'API Azure Graph, mais elles semblent soit trop lourdes, soit pas la direction que je devrais prendre. De l'aide?

Répondre

2

Comme vous l'avez déjà constaté, cette approche ne fonctionne pas dans Azure AD: votre application n'est pas en cours d'exécution sur votre intranet, ce qui signifie que ces appels ne peuvent pas avoir lieu. La solution standard consiste à s'assurer qu'Azure AD inclut des groupes dans le jeton envoyé au moment de la signature, voir le sample. Il est important de garder à l'esprit les différents points d'attention - le principal est que l'utilisation de WIF vous oblige à vous fier à WSFederation, ce qui n'est pas pratique si vous avez trop de groupes: Azure AD évite d'émettre de gros jetons en attendant que vous rappeliez l'API Azure AD Graph et récupérez les groupes après coup, mais cette opération nécessite des protocoles plus modernes comme OpenID Connect (comme indiqué dans l'exemple auquel je suis lié). L'autre défi est que les groupes dans le jeton sont représentés par leur SID et non par leur nom, pour des raisons de sécurité - par conséquent, vous devez connaître le SIDS que vous souhaitez valider (ou appeler le graphique pour récupérer leurs noms).

HTH