2015-11-24 3 views
1

J'ai parlé à d'autres liens dans le forum et je le code ci-dessous qui fonctionne et moi obtient les groupes de sécurité d'un UPN particuliercomment obtenir les noms de groupe de sécurité d'un utilisateur dans le répertoire actif d'azur

private List<string> GetGroups(string userName) 
{ 
List<string> result = new List<string>(); 
WindowsIdentity wi = new WindowsIdentity(userName); 

foreach (IdentityReference group in wi.Groups) 
{ 
    try 
    { 
     result.Add(group.Translate(typeof(NTAccount)).ToString()); 
    } 
    catch (Exception ex) { } 
} 
result.Sort(); 
return result; 
} 

Mais le même code n'a pas fonctionné pour Azure. J'ai donc essayé ci-dessous le code qui fonctionne, mais je ne l'ai pas trouvé un moyen de lire les noms de groupe de sécurité que l'utilisateur actuel:

 var displayName = ClaimsPrincipal.Current.FindFirst(ClaimTypes.Name).Value ; 
     var upn = ClaimsPrincipal.Current.FindFirst(ClaimTypes.Upn).Value; 
+1

Avez-vous vérifié la documentation? - http://justazure.com/azure-active-directory-part-4-group-claims/ || [Exemples de code MSDN Azure Active Directory] (https://msdn.microsoft.com/fr-fr/library/azure/dn646737.aspx) – MethodMan

Répondre

1

Le code dans votre question fait référence aux utilisateurs authentifiés à l'aide de l'authentification Windows intégrée (WIA). Lorsque vous utilisez Azure AD, vous vous authentifiez généralement sur Internet, en utilisant des protocoles d'authentification tels que OpenID Connect, qui fonctionnent plus haut que la couche réseau. Cela entraîne une représentation différente de l'identité de l'appelant. Veuillez vous reporter à http://blogs.technet.com/b/ad/archive/2014/12/18/azure-active-directory-now-with-group-claims-and-application-roles.aspx pour obtenir des conseils et des liens utiles sur l'utilisation de groupes dans Azure AD.

0

Il suffit de voir votre problème, le problème doit être résolu par memberof attributs, vous donner un exemple pour vous aider à trouver le nom du groupe de sécurité.

var searchString = "upnname"; 
     try 
     { 
      List<IUser> users = activeDirectoryClient.Users.Where(User => User.UserPrincipalName.StartsWith(searchString)).ExecuteAsync().Result.CurrentPage.ToList(); 
      foreach (IUser user in users) 
      { 
       IUserFetcher userfetch = user as IUserFetcher; 
       IList<Group> groupMembership = new List<Group>(); 
       IPagedCollection<IDirectoryObject> pagedCollection =userfetch.MemberOf.ExecuteAsync().Result; 

       List<IDirectoryObject> directoryObjects = pagedCollection.CurrentPage.ToList(); 
       foreach (IDirectoryObject directoryObject in directoryObjects) 
       { 
        if (directoryObject is Group) 
        { 
         var group = directoryObject as Group; 
         if(group.SecurityEnabled.Equals(true)) 
         { 
         groupMembership.Add(group); 
         Console.WriteLine("UserPrincinpleName:{0} Group DisplayName:{1}", user.UserPrincipalName, group.DisplayName); 
         } 
        } 
       } 

      }   
       } 

     catch (Exception e) 
     { 
      Console.WriteLine("\nError getting Group {0} {1}", 
       e.Message, e.InnerException != null ? e.InnerException.Message : ""); 
     } 

Il existe certaines différences dans B2C. Gardez le contact si vous avez des questions.

0
public static string LookupDisplayNameOfAADObject(string objectId) 
{ 
    string objectDisplayName = null; 
    string tenantId = (System.Security.Claims.ClaimsPrincipal.Current). 
         FindFirst("http://schemas.microsoft.com/identity/claims/tenantid").Value; 
    string signedInUserID = (System.Security.Claims.ClaimsPrincipal.Current). 
          FindFirst(System.IdentityModel.Claims.ClaimTypes.NameIdentifier).Value; 
    string userObjectID = (System.Security.Claims.ClaimsPrincipal.Current). 
          FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value; 
    ClientCredential credential = new ClientCredential(ConfigurationManager.AppSettings["ida:ClientId"], 
                 ConfigurationManager.AppSettings["ida:ClientSecret"]); 

    // initialize AuthenticationContext with the token cache of the currently signed in user, as kept in the app's EF DB 
    AuthenticationContext authContext = new AuthenticationContext(
     string.Format(ConfigurationManager.AppSettings["ida:Authority"], tenantId), 
     new ADALTokenCache(signedInUserID)); 

    AuthenticationResult result = authContext.AcquireTokenSilent(
     ConfigurationManager.AppSettings["ida:GraphAPIIdentifier"], 
     credential, 
     new UserIdentifier(userObjectID, UserIdentifierType.UniqueId)); 

    HttpClient client = new HttpClient(); 

    string doQueryUrl = string.Format("{0}/{1}/directoryObjects/{2}?api-version={3}", 
             ConfigurationManager.AppSettings["ida:GraphAPIIdentifier"], tenantId, 
             objectId, 
             ConfigurationManager.AppSettings["ida:GraphAPIVersion"]); 

    HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, doQueryUrl); 
    request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken); 
    HttpResponseMessage response = client.SendAsync(request).Result; 

    if (response.IsSuccessStatusCode) 
    { 
     var responseContent = response.Content; 
     string responseString = responseContent.ReadAsStringAsync().Result; 
     var directoryObject = System.Web.Helpers.Json.Decode(responseString); 

     if (directoryObject != null) 
     { 
      objectDisplayName = string.Format("{0} ({1})", directoryObject.displayName, directoryObject.objectType); 
     } 

     return objectDisplayName; 
    } 
}