2016-04-21 10 views
0

Wir haben Anwendung in MEAN Stack entwickelt. Wir verwenden die Bibliothek adal-agular für die azure-Anzeigenauthentifizierung. Entsprechend der documentation and sampleAzure AD: Wie erhält man Gruppeninformationen in Token?

Adal.js verwendet den impliziten OAuth-Flow für die Kommunikation mit Azure AD. Sie müssen den impliziten Fluss für Ihre Anwendung aktivieren.

jedoch, wenn wir impliziten Fluss ermöglichen, AD Azure DOES NOT Gruppeninformationen in dem Token enthalten. Das Problem wurde here im Detail diskutiert und von @vibronet bestätigt

Frage
Azure AD Funktionalitäten fast jeden Tag haben sich verändert, so sind die oben genannten Antworten noch gültig? Müssen wir den impliziten Fluss unserer Anwendung noch aktivieren? Ich möchte Gruppeninformationen in Token bekommen (ich möchte nicht Graph API als Lösung verwenden.)

ein weiterer Grund, warum ich diese Frage bin zu fragen, weil ich deaktiviert die implizite Strömung und Benutzer noch in der Lage war, die für den Zugriff auf Anwendung. Allerdings sehe ich immer noch nicht Gruppe Informationen im Token.

+0

Haben Sie Gruppenansprüche in der Anwendung manifestieren aktivieren? Um zu vermeiden, GraphAPI zu verwenden, wie garantieren Sie, dass Ihre Benutzer nie mehr Gruppen als das Maximum haben, das in einem Token erlaubt ist? –

+0

Angenommen, Sie sind das auch: https://social.msdn.microsoft.com/Forums/en-US/2b49109b-b98a-4b54-b644-43d623a7d36a/azure-ad-jwt-token-is-missing-group-information ? Forum = WindowsAzureAD, ich sehe Sie haben. Haben Sie sich das rohe "id_token" angeschaut (z. B. mit etwas wie jwt.io)? –

+0

@PhilippeSignoret Ja das bin ich. Ich bin mir nicht sicher, wie jwt.io mir hier helfen würde, wenn azure diese Information niemals in das Token aufnehmen würde. Wir verwenden auch "Pass-azure-ad" auf dem Server, der das Token analysiert und validiert. – LP13

Antwort

0

unmöglich, ohne die Grafik aus der BE-Aufruf:

Hier Diskussion: https://github.com/AzureAD/azure-activedirectory-library-for-js/issues/239

Wenn hasgroups Anspruch existiert nicht in Ihrem id_token - erhalten Gruppen von id_token. falls vorhanden - den Graph nennt

Beispiel für den AD Azure 2.0 Endpunkt:

 using Microsoft.Identity.Client; 

     ... 

     //Obtaining the Access Token By Id Token... 

     var redirectUri = "http://localhost"; 
     var authority = @"https://login.microsoftonline.com/common/v2.0"; 
     var clientId = "00000000-0000-0000-0000-000000000000"; 
     var userObjectId = "00000000-0000-0000-0000-000000000000"; //from id_token 
     var idToken = "ey-- ID Token from the JS Side"; 
     var appKey = "Client Secret here"; 

     var cc = new ClientCredential(appKey); 
     var cca = new ConfidentialClientApplication(clientId, authority, redirectUri, cc, null, null); 
     var ua = new UserAssertion(idToken, "urn:ietf:params:oauth:grant-type:jwt-bearer"); 
     var authResult = await cca.AcquireTokenOnBehalfOfAsync(new[] { "User.Read", "Group.Read.All" }, ua); //Make sure - here is one user consented scope (shuld be requested from the FronEnd side) and one - admin consented 

     var accessToken = authResult.AccessToken; 

     // And then calling the MS Graph... 

     var requestUrl = $"https://graph.microsoft.com/v1.0/users/{userObjectId}/getMemberGroups"; 

     // Prepare and Make the POST request 
     HttpResponseMessage response; 
     using (var client = new HttpClient()) 
     { 
      using (var request = new HttpRequestMessage(HttpMethod.Post, requestUrl)) 
      { 
       request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); 
       var content = new StringContent("{\"securityEnabledOnly\": \"true\"}"); 
       content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); 
       request.Content = content; 
       response = await client.SendAsync(request); 
      } 
     } 

     var groupObjectIds = new List<string>(); 

     // Endpoint returns JSON with an array of Group ObjectIDs 
     if (response.IsSuccessStatusCode) 
     { 
      var responseContent = await response.Content.ReadAsStringAsync(); 
      var groupsResult = Json.Decode(responseContent).value; 

      foreach (string groupObjectId in groupsResult) 
       groupObjectIds.Add(groupObjectId); 
     } 

     return groupObjectIds; 
0

Azure AAD JWT tut Sicherheitsgruppen in impliziten Strömungs emittieren. In Anwendungsregistrierung manifest, gesetzt "groupMembershipClaims": "SecurityGroup",

Dann in Ihrem Server:

var groups = new List<string>(); 
     ClaimsPrincipal.Current.Claims.Where(t => t.Type == "groups") 
    .ForEach(g => groups.Add(g.Value)); 

keine Notwendigkeit für GraphApi

https://docs.microsoft.com/en-us/azure/architecture/multitenant-identity/app-roles https://github.com/Azure-Samples/active-directory-dotnet-webapp-groupclaims