2017-01-22 4 views
1

urllib2를 사용하여 Python에서 Dynamics CRM Web API에 요청하는 앱을 만들려고합니다. 지금까지 나는 다른 게시물을 만들려고 그런Dynamics CRM 웹 API에 요청하기

url = 'https://login.microsoftonline.com/common/oauth2/token' 
post_fields = {'grant_type': 'authorization_code', 
       'client_id': CLIENT_ID, 
       'client_secret': CLIENT_SECRET, 
       'redirect_uri': REDIRECT_URI, 
       'resource': 'https://graph.microsoft.com', 
       'code': code} 
request = Request(url, urlencode(post_fields).encode()) 
resp = urlopen(request).read().decode() 
resp = json.loads(resp) 
refresh_token = resp['refresh_token'] 
id_token = resp['id_token'] 
id_token = jwt.decode(id_token,verify=False) 
access_token = resp['access_token'] 

다음 검색 authorization_code와 나는 urllib2를 가진 access_token은, refresh_token도 등을 얻을 수 있습니다 https://login.microsoftonline.com/common/oauth2/authorize 에 POST 요청을하여 푸른 응용 프로그램과 사용자가 로그인 할 수 있습니다 access_token을 사용하여 요청했지만 운이 없었습니다. 내가 점점 계속 :

HTTP 오류 401 : 무단

내가 .dynamics.com/API/데이터/V8.1에 직접 게시물을 그냥 테스트로/다음과 같이 리드 :

url = 'https://<company_uri>.dynamics.com/api/data/v8.1/leads' 
post_fields = {"name": "Sample Account", 
       "creditonhold": "false", 
       "address1_latitude": 47.639583, 
       "description": "This is the description of the sample account", 
       "revenue": 5000000, 
       "accountcategorycode": 1 
       } 
request = Request(url, urlencode(post_fields).encode()) 
request.add_header('Authorization', 'Bearer ' + access_token) 
request.add_header("Content-Type", "application/json; charset=utf-8") 
request.add_header('OData-MaxVersion','4.0') 
request.add_header('OData-Version','4.0') 
request.add_header('Accept','application/json') 
resp = urlopen(request).read().decode() 

하지만 동일한 401 오류 코드가 계속 나타납니다. msdn 설명서를 다 살펴 보았지만 라이브러리를 사용하지 않고이 작업을 직접 수행 할 방법을 찾지 못했습니다. 간단한 게시물 요청 만 사용하고 싶습니다.

오류 코드에 Unauthorized가 표시되므로 access_token을 다른 방법으로 보내야한다고 생각합니다. Dynamics CRM에서 access_token을 올바르게 사용하는 방법에 대해 도움을 줄 수 있습니까? 감사합니다.

답변

2

돌아온 액세스 토큰은 Azure AD Graph API 용입니다. Dynamics CRM이 아닙니다.

전화하려면 리소스이 동적 CRM API의 앱 ID URI로 설정된 액세스 토큰 (https://graph.windows.net이 아님)을 요청해야합니다.

documentation에 따르면 리소스에서 https://<company_uri>.crm.dynamics.com으로 설정해야합니다. 당신이 토큰을 검색 할 때

그래서 : 내가 전에 한 번 자원을 변경했다

url = 'https://login.microsoftonline.com/common/oauth2/token' 
post_fields = {'grant_type': 'authorization_code', 
       'client_id': CLIENT_ID, 
       'client_secret': CLIENT_SECRET, 
       'redirect_uri': REDIRECT_URI, 
       'resource': 'https://<company_uri>.crm.dynamics.com', 
       'code': code} 
+0

을하지만 난 대답을 가진 적이 없어, 난 항상 "HTTP/1.1 400 잘못된 요청"을 얻고 있었다. https://graph.microsoft.com 리소스를 통해 코드를 얻었지만 이제는 액세스 권한을 부여하려는 리소스가 아니기 때문에 유용하다는 것을 알았습니다. 지금 자원을 변경했지만 400 오류가 발생합니다. –

+0

응답을 읽으면 문제가 무엇인지 말할 수 있습니다. – juunas

+0

"사용자 또는 관리자가 응용 프로그램 사용에 동의하지 않았습니다." 원래의 문제는 잘못된 리소스 때문이었습니다. 그래서 이것이 해결되었다고 생각합니다. 고마워요 @ 주니어. –