2017-09-27 3 views
2

Ich habe ein Problem (oder zwei) in Bezug auf den Zugriff auf mein Office 365-Konto über die Microsoft Graph API.Office 365 Zugriff über Graph API

Das erste Problem ist, dass ich ein Java-Programm habe, das versucht, alle Benutzer im Office 365-Abonnement aufzulisten. Ich rufe https://graph.microsoft.com/v1.0/users/, aber bekomme eine 403 forbidden zurück.

In der App-Registrierung, habe ich Berechtigungen einschließlich User.Read, User.ReadBasic.All, User.ReadWrite sowohl delegierte als auch App-Berechtigungen hinzugefügt.

Ich habe auch versucht, den Graph Explorer zu verwenden, aber wenn ich mein Konto benutze, verwendet es immer noch den eingebauten Graphenbenutzer und zeigt nicht meine Anmeldedaten an. Nicht sicher, ob diese verwandt sind. Hier

ist Code-Schnipsel, die

AuthenticationResult result = getAccessTokenFromUserCredentials(RESOURCE_GRAPH, ID, PASSWORD); 

URL url = new URL("https://graph.microsoft.com/v1.0/users/") ; 

HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

conn.setRequestMethod("GET"); 
conn.setRequestProperty("Accept", "application/json"); 
conn.setRequestProperty("Authorization", "Bearer "+result.getAccessToken()); 
if (conn.getResponseCode() != 200) { 
    throw new RuntimeException("Failed : HTTP error code : " 
      + conn.getResponseCode()); 
} 

in einem 403 Ergebnisse Und hier ist die Methode, die das Token

private static AuthenticationResult getAccessTokenFromUserCredentials(String resource, 
                      String username, String password) throws Exception { 
     AuthenticationContext context; 
     AuthenticationResult result = null; 
     ExecutorService service = null; 
     try { 
      service = Executors.newFixedThreadPool(1); 
      context = new AuthenticationContext(AUTHORITY, false, service); 
      Future<AuthenticationResult> future = context.acquireToken(
        resource, CLIENT_ID, username, password, 
        null); 
      result = future.get(); 
     } finally { 
      service.shutdown(); 
     } 

     if (result == null) { 
      throw new ServiceUnavailableException(
        "authentication result was null"); 
     } 
     return result; 
    } 
+0

Wie authentifizieren Sie den Benutzer, um das übergebene Token in '/ users' zu bekommen? –

+0

Mit Codebeispiel aktualisiert. Wenn ich https://graph.microsoft.com/v1.0/me/ anrufe, bekomme ich die JSON-Zeichenfolge zurück, die meinen Benutzer darstellt. Aber wenn ich mit/users/rufe, bekomme ich die 403. Ich kann auch auf den Sharepoint-Endpunkt zugreifen und Website-Daten usw. erhalten. – Gary

+0

User.ReadBasic.Alle benötigen Admin-Zustimmung, haben Sie versucht, Admin-Zustimmung zu tun? Wo registrierst du die App im azurblauen Portal? –

Antwort

1

Die App-Register wird in apps.dev.microsoft.com mit den Werken v2.0-Endpunkt. Klicken Sie hier, um weitere Details zum v2.0-Endpunkt zu erhalten.

Sie können Token mit v2.0 authentication protocols und Azure Active Directory v2.0 authentication libraries erwerben. Während der Authentifizierung müssen Sie die Zustimmung des Benutzers oder die Zustimmung des Administrators für die Berechtigung User.ReadBasic.All erteilen. Nach dem Genehmigen enthält das Zugriffstoken diese Delegiertenberechtigung und funktioniert beim Aufrufen der Listenbenutzeroperation.

+0

Leider habe ich den Endpunkt und die Bibliothek von Version 2.0 verwendet, scheint aber ein Problem mit den Apps zu sein. Registrierungsportal. – Gary

1

OK, dachte ich sollte die Antwort posten. Erstens und höchst verwirrend schien die Registrierung von apps.dev.microsoft.com nicht zu funktionieren (obwohl ich den V2.0-Endpunkt und die Bibliotheken der Version 2 verwendet habe).

Wenn ich jedoch die App direkt über das Azure-Portal registriert habe, wurde das Problem behoben. Ich konnte anschließend den Dienst korrekt aufrufen.

Es scheint seltsam, dass, obwohl der Authentifizierungs-/Autorisierungsdienst Standard für meine App war und perfekt für den Zugriff auf Sharepoint/One Drive usw. funktionierte, aber wenn er den Benutzerendpunkt treffen wollte, würde er nur funktionieren, wenn er registriert war das portal.azure.com.

Vielen, vielen Dank für Ihre Hilfe.

Verwandte Themen