1

Ich verwende oauth2/Token, um meine Anwendung zu authentifizieren und das Access_Token zu erhalten. Bellow ist der Java-Code, der gut funktioniert.Microsoft Graph API Authentifizierung_MissingOrMalformed

private String getToken() throws Exception { 
     String access_token = ""; 
     String url = "https://login.windows.net/MyApplication_ID_here/oauth2/token"; 
     HttpClient client = HttpClients.createDefault(); 
     HttpPost post = new HttpPost(url); 

     post.setHeader("Content-Type", "application/x-www-form-urlencoded"); 

     List<NameValuePair> urlParameters = new ArrayList<NameValuePair>(); 
     urlParameters.add(new BasicNameValuePair("grant_type", "client_credentials")); 
     urlParameters.add(new BasicNameValuePair("client_id", "MyApplication_ID_here")); 
     urlParameters.add(new BasicNameValuePair("client_secret", "MyApplication_secret_here")); 
     urlParameters.add(new BasicNameValuePair("resource", "https://graph.microsoft.com")); 

     post.setEntity(new UrlEncodedFormEntity(urlParameters)); 

     HttpResponse response = client.execute(post); 
     System.out.println("Sending 'POST' request to URL : " + url); 
     System.out.println("Post parameters : " + post.getEntity()); 
     System.out.println("Response Code : " + response.getStatusLine().getStatusCode()); 

     String responseAsString = EntityUtils.toString(response.getEntity()); 
     System.out.println(responseAsString); 
     try { 
      access_token = responseAsString.split(",")[6].split("\"")[3]; // get the access_token from response 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return null; 
     } 
     return access_token; 
} 

Antwort:

{"token_type":"Bearer","expires_in":"3599","ext_expires_in":"0","expires_on":"1493011626","not_before":"1493007726","resource":"https://graph.microsoft.com","access_token":"eyJ0e..."} 

dann verwende ich access_token die memberOf Wert zu laden, die nicht funktioniert und gibt mir die Zugriffstoken fehlende oder fehlerhafte Fehler. Bellow ist der Java-Code

private void getMemberOf() 
{ 
    HttpClient httpclient = HttpClients.createDefault(); 
    try 
    { 
     URIBuilder builder = new URIBuilder("https://graph.windows.net/MyApplication_ID_here/users/[email protected]/memberOf?api-version=1.6"); 
     URI uri = builder.build(); 
     HttpGet request = new HttpGet(uri); 
     request.addHeader("Authorization", "Bearer " + access_token); 
     request.addHeader("Content-Type", "application/json"); 

     HttpResponse response = httpclient.execute(request); 
     HttpEntity entity = response.getEntity(); 
     System.out.println("Response Code : " + response.getStatusLine().getStatusCode()); 
     if (entity != null) { 
      System.out.println(EntityUtils.toString(entity)); 
     } 
    } 
    catch (Exception e) 
    { 
     e.getMessage(); 
    } 
} 

Antwort:

Response Code : 401 
{"odata.error":{"code":"Authentication_MissingOrMalformed","message":{"lang":"en","value":"Access Token missing or malformed."},"date":"2017-04-24T04:39:38","requestId":"c5aa2abe-9b37-4611-8db1-107e3ec08c14","values":null}} 

mir bitte jemand, welcher Teil der oben Anfrage sagen kann, ist falsch? Setze ich access_token nicht korrekt?

Antwort

2

nach Ihren Code, Ihr Zugriffstoken ist für Ressource "https://graph.microsoft.com "(Microsoft Graph API), aber die Zugriffstoken für" https://graph.windows.net" (AAD Graph API) verwendet:

URIBuilder builder = new URIBuilder("https://graph.windows.net/MyApplication_ID_here/users/[email protected]/memberOf?api-version=1.6"); 

Wenn Sie Möchten Sie Azure AD Graph API aufrufen, müssen Sie Zugriffstoken für Azure AD Graph API erhalten.

+0

Danke !!!! nach dem Ändern von URLParameters.add (neue BasicNameValuePair ("Ressource", "https://graph.microsoft.com")); zu urlParameters.add (neues BasicNameValuePair ("Ressource", "https://graph.windows.net")); Alles funktioniert jetzt gut – Roshanck