2017-10-27 2 views
0

Ich schreibe eine einfache Android-App in Java und habe kürzlich das Abrufen eines Tokens für einen Benutzer aus Microsoft Dynamics CRM implementiert (ich habe eine verbundene App in Azure erstellt, Anwendungs-ID erhalten , Geheimnis usw.).Dynamics CRM-Token kann nicht verwendet werden (401 Nicht autorisiert)

Ich möchte, dass andere Benutzer dieser Anwendung eine Verbindung zu ihren CRMs und Organisationen herstellen können.

Jetzt versuche ich, das Token mit der REST-API zu verwenden und Fehler 401 zu bekommen. Lesen Sie alle zugehörigen Antworten hier, nichts half. Der Code Ich verwende:

//retrieved the authorization code by this url: 
mAuthorizationUrl = Configuration.AUTHORIZE_ENDPOINT + "?response_type=code&client_id=" 
+ Configuration.CLIENT_ID + "&redirect_uri=" + Configuration.REDIRECT_URI; 

... 

//Retrieving access_token: 
String body_content = "grant_type=authorization_code&client_id=" + 
Configuration.CLIENT_ID + "&redirect_uri=" + Configuration.REDIRECT_URI 
+ "&code=" + code + "&resource=" + Configuration.CLIENT_ID; 
//I don't have app URI (resource) in Azure, so I used app id (client id). 
//This worked (see above). 

RequestBody body = RequestBody.create(
        MediaType.parse("application/x-www-form-urlencoded; charset=utf-8"), 
        body_content); 
Request request = new Request.Builder() 
.url(Configuration.TOKEN_RETRIEVAL_ENDPOINT) 
.post(body) 
.build(); 

Response response = new OkHttpClient().newCall(request).execute(); 

String responseString = response.body().string(); 
JSONObject json = new JSONObject(responseString); 
String token = json.getString("access_token"); 

//NOT WORKING CODE: 
OkHttpClient okHttpClient = new OkHttpClient().newBuilder() 
.protocols(Collections.singletonList(Protocol.HTTP_1_1)) 
.build(); 

Map<String, String> headers = new ArrayMap<>(); 
headers.put("Authorization", "Bearer " + token)); 
headers.put("Accept", "application/json"); 

request = new Request.Builder() 
.url(Configuration.REST_ENDPOINT) 
.headers(Headers.of(headers)) 
.build(); 
try { 
    response = okHttpClient 
    .newCall(request) 
    .execute(); 
    statusCode = response.code(); 
} 
... 

//401 UNAUTHORIZED 

Endpunkte I verwendet:

AUTHORIZE_ENDPOINT = https://login.microsoftonline.com/common/oauth2/authorize

TOKEN_RETRIEVAL_ENDPOINT = https://login.microsoftonline.com/common/oauth2/token

REST_ENDPOINT = url_to_crm /api/data/v9.0/

+0

Haben Sie versucht, diese Anforderung mit einem REST-Client, z. B. Advanced REST-Client, auszuführen? Solche Clients sind eine gute Möglichkeit, REST-APIs zu untersuchen und Ihre Anforderungen zu überprüfen. – Boris

Antwort

1

Hier sind zwei Beispiel-Java-Projekte, die verbinden und authenti kat mit der Dynamics Web API über Azure:

Link 1

Link 2

Hoffnung, das hilft.

Verwandte Themen