2016-12-20 10 views
1

Ich authentifiziere mich mit Client ID und Secret.Microsoft Graph API-Inhalt 401 Nicht autorisiert

String url = String.format("https://login.microsoftonline.com/%s/oauth2/token", tenantContext); 
AuthenticationContext context = new AuthenticationContext(url, true, ForkJoinPool.commonPool()); 
AuthenticationResult result = context.acquireToken("https://graph.microsoft.com", new ClientCredential(clientId, clientSecret), null).get();  
String token = result.getAccessTokenType() + " " + result.getAccessToken(); 

Meine Anwendung hat alle Erlaubnis Anforderungen erfüllen und mit dem oben Token kann ich Benutzer auflisten und ihre Laufwerke und Ordner durchquert. Ich kann auf Inhalt von https://graph.microsoft.com/v1.0/drives/%s/items/%s/content zugreifen, die eine andere URL in der Location-Kopfzeile zurückgibt. Wenn ich jedoch versuche, diese URL zu erhalten, wird 401 Nicht autorisiert zurückgegeben.

+0

Alternativ enthält das Element json ein Feld der Form: '" @ microsoft.graph.downloadUrl ":" https: // {Mieter} -my.sharepoint.com/personal/ {user} _ {Mieter} _onmicrosoft_com/_layouts/15/download.aspx? UniqueId = ... & access_token = ... & proctoken = ... "' was aussieht, als ob man darauf zugreifen können sollte, aber das funktioniert auch nicht. – Alastair

Antwort

0

Ist die andere URL auch auf graph.microsoft.com? Ist dies nicht der Fall, müssen Sie ein neues Authentifizierungstoken für diese URL abrufen und es dann in Ihren Downloadanforderungen verwenden.

Genau wie Sie sind bereits mit graph.microsoft.com zu tun, aber mit dem anderen Server Name:

AuthenticationResult result = context.acquireToken("https://onedrive-server-name", new ClientCredential(clientId, clientSecret), null).get();  
+0

Ich habe versucht, ein Token für die Location-URL-Ressource - "https: // {mandant} -my.sharepoint.com", aber immer noch 401. In "https: // manage.windowsazure.com" habe ich Graph, O365 Sharepoint hinzugefügt Online und Azure AD für meine App mit allen Leseberechtigungen. – Alastair

0

Stellen Sie sicher, Sie haben hinzugefügt folgende Erlaubnis: Files.ReadAll oder Files.ReadWriteAll das Entziehen App-Zugriff und versuchen Sie es erneut()

Allerdings sollte die "@ microsoft.graph.downloadUrl" out-of-Box funktionieren, möglicherweise deaktiviert Sie Offline-Zugriff in Bibliothekseinstellungen?

+0

Ich habe kein Glück beim Herunterladen mit 'ClientCredential',' AsymmetricKeyCredential' oder sogar mit einem vollständig eingeloggten Refresh Token. Ich bekomme die '@ microsoft.graph.downloadUrl' aber dann die 401. Wo denken, dass Downloads möglicherweise deaktiviert sind? – Alastair

0

mir gelungen Inhalte von den Benutzern beim Herunterladen von in Admin-Benutzer anmelden und ein Aktualisierungs-Token von app authentication using Azure AD

Die Aktualisierungs-Token adal4j verwendet, kann dann eingelöst werden, erhalten immer:

AuthenticationContext context = new AuthenticationContext(url, true, ForkJoinPool.commonPool()); 
AuthenticationResult result = context.acquireTokenByRefreshToken(refreshToken, new ClientCredential(clientId, clientSecret), "https://graph.microsoft.com", null).get(); 
String token = result.getAccessTokenType() + " " + result.getAccessToken(); 

dieses Zugriffstoken verwenden Sie können über Dateiinhalt erhalten: https://graph.microsoft.com/v1.0/drives/{driveid}/items/{itemid}/content

Es gibt einen dringend erforderlichen zusätzlichen Schritt ist - der Admin-Benutzer hinzugefügt werden muss, als ein sitzen e Sammlungseigner für den Benutzer, auf dessen Inhalt Sie zugreifen. Dies wird in this blog beschrieben.

Verwandte Themen