2017-01-22 2 views
1

Я пытаюсь создать приложение, которое делает запросы к API-интерфейсу Dynamics CRM с помощью python с помощью urllib2. До сих пор я могу войти в пользователя с Azure приложения, сделав запрос на запись к https://login.microsoftonline.com/common/oauth2/authorize затем извлеченной authorization_code я могу получить access_token, refresh_token и другие с urllib2Выполнение запроса к API-интерфейсу Dynamics CRM

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'] 

Затем я попытался сделать еще один пост запросить с помощью 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, но не нашел способ сделать это напрямую, не используя никакой библиотеки, я просто хочу использовать простой почтовый запрос.

Поскольку код ошибки говорит «Неавторизованный», я думаю, что access_token нужно отправить другим способом. Может ли кто-нибудь помочь мне в правильном использовании access_token в Dynamics CRM? Спасибо!

ответ

2

Аксессуар доступа, который вы получили, предназначен для API графиков Azure AD. Not Dynamics CRM.

Для этого необходимо запросить токен доступа с ресурсом, установленным в URI идентификатора приложения Dynamics CRM API, а не 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 Bad Request». С ресурсом https://graph.microsoft.com я получал код, но теперь понимаю, что это было полезно, потому что это не тот ресурс, который я хочу получить. Теперь я изменил ресурс, но я получаю эту ошибку 400. –

+0

Вы должны прочитать ответ, он скажет, в чем проблема. – juunas

+0

«Пользователь или администратор не согласился использовать приложение». Первоначальная проблема была из-за неправильного ресурса, поэтому я думаю, что это было решено. Спасибо @juunas. –

Смежные вопросы