2016-04-22 8 views
0

Ich versuche user photo Ausblick REST-API (https://msdn.microsoft.com/en-us/office/office365/api/photo-rest-operations#UserphotooperationsGetphoto)Erste 401-Unauthorized während Foto bekommen API mit Outlook REST - java cliet

Ich habe das Zugriffstoken folgende (https://msdn.microsoft.com/en-us/library/azure/dn645543.aspx)

aber immer abrufen Dieser Fehler: keine Hilfe?

HTTP/1.1 401 Unauthorized [Content-Length: 0, Server: Microsoft-IIS/8.0, Anfrage-ID: 6925fcab-9021-4059-af4b-4cbf130faea7, X-CalculatedBETarget: CY1PR0401MB1388.namprd04.prod. outlook.com, X-BackEndHttpStatus: 401, Set-Cookie: exchangecookie = 87cb2447eae9401c80a96c497dff06a9; abläuft = Sa, 22-Apr-2017 07:56:53 GMT; Pfad = /; HttpOnly, x-ms-diagnostics: 2000001; reason = "Das Zugriffstoken wird mithilfe einer Authentifizierungsmethode erworben, die zu schwach ist, um den Zugriff für diese Anwendung zuzulassen. Die angegebene Auth-Stärke war 1, erforderlich ist 2."; Error_category = "invalid_token"

,

Code sieht etwa so aus:

HttpClient httpclient = HttpClients.createDefault(); 

final String bearerToken = getBearerToken(); 
HttpGet request = new HttpGet("https://outlook.office.com/api/v2.0/me/photo/$value"); 
request.setHeader(javax.ws.rs.core.HttpHeaders.AUTHORIZATION, "Bearer " + bearerToken); 
request.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE); 

HttpResponse response = httpclient.execute(request); 
return IOUtils.toByteArray(response.getEntity().getContent()); 

Antwort

0

nach der Fehlermeldung. Anstelle eines client_secret in Ihrem Anfragekörper benötigen Sie einen client_assertion.

Für weitere Informationen können Sie den Blog Referenz Building Daemon or Service Apps with Office 365 Mail, Calendar, and Contacts APIs (OAuth2 client credential flow)

Nach der API Sie "https://outlook.office.com/api/v2.0/me/photo/ $ value" nennen. Es scheint, dass Sie nur das Foto für den aktuellen Login-Benutzer erhalten möchten; Wenn dies der Fall ist, können Sie Authorization Code Grant Flow verwenden, um das Token abzurufen, für das keine Clientzertifikate erforderlich sind.

UPDATE # 1:

Kann diese programmatisch/API Weise

Was getan werden, ich weiß, brauchen die Zustimmung der Interaktivität des oder Admin des Benutzers.

https://login.windows.net/common/oauth2/authorize?response_type=code&client_id={0}&resource={1}&redirect_uri={2}&prompt={3} 

enter image description here

Wenn Sie eine ASP.NET Web-Anwendung entwickeln, können Sie das Beispielprojekt O365-WebApp-MultiTenant verweisen.

BTW, wenn Sie die API mit App-Token aufrufen, müssen Sie den Benutzernamen angeben.

z.B.

https://outlook.office.com/api/v2.0/users('[email protected]')/messages 

UPDATE # 2:

Der 403-Code, wenn Sie das Foto die Aktualisierung der App Token Ergebnis erwartet wird. enter image description here

Wie aus der obigen Abbildung hervorgeht, erfordert die Aktualisierung des Benutzerfotos die delegierte Berechtigung "User.Read.Write". Das App-Token ist nicht berechtigt, das Foto eines Nutzers zu aktualisieren.

+0

Hallo Jeffrey, vielen Dank für Ihre Antwort! Lassen Sie mich Ihnen mein Szenario geben = "Es ist eine Multi-Tenant-App, die das Aktualisieren des Benutzerprofils (Anzeigename, Foto usw.) erlaubt" Nach dem Lesen scheint es, als müsste ich 1. Zugriffs-Token (für bestimmten Mandanten) mit und abrufen ein X.509-Zertifikat mit einem öffentlichen/privaten Schlüsselpaar. 2. Erstellen Sie eine Art Zustimmungs-Tool, um die App im Mandantenverzeichnis zu installieren. Ich werde diese Route versuchen - gemeint ist eine Frage zu # 2 Kann dies programmatisch/API erfolgen, ja natürlich, wenn wir den Admin-Credential für den Tenant kennen. –

+0

@Pallab, über Frage # 2, ich habe es –

+0

Dank in meiner Antwort aktualisiert sehr für Ihre Antwort und ich habe dir gefolgt Weg die access_token auf diese Weise bekommen und jetzt ich in ein anderes Problem bekam: GET https: // Graph .microsoft.com/v1.0/users/{upn}/Foto/Wert $ eine Antwort Status des access_token über Admin Zustimmung 403 bekam Verbotene –