2017-10-27 5 views
0

Java에서 간단한 Android App을 작성 중이며 최근에 Microsoft Dynamics CRM에서 사용자 토큰을 가져와 구현했습니다. (Azure에서 연결된 응용 프로그램을 만들었습니다. 응용 프로그램 ID가 있습니다. , 비밀 등).Dynamics CRM 토큰 (401 Unauthorized)을 사용할 수 없습니다.

이 애플리케이션의 다른 사용자가 CRM 및 조직에 연결할 수있게하려고합니다.

이제 REST API와 함께 토큰을 사용하고 401 오류가 발생합니다. 여기에 관련된 모든 대답을 읽으십시오. 도움이되는 내용이 없습니다. 내가 사용하고 코드 :

//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 

엔드 포인트는 내가 사용 :

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

REST 클라이언트 (예 : 고급 REST 클라이언트)를 사용하여이 요청을 수행하려고 시도 했습니까? 이러한 클라이언트는 REST API를 탐색하고 요청을 확인하는 좋은 방법입니다. – Boris

답변

1

다음은 연결하고 인증하는 두 개의 샘플 Java 프로젝트입니다. 푸른 통해 역학 웹 API와 케이트 :이 도움이

Link 1

Link 2

희망.