Я пытаюсь получить доступ к новому API REST для создания интерфейса сервер-сервер для интеграции CRM с другими приложениями, такими как веб-магазин и т. Д.Аутентификация с помощью веб-интерфейса REST для MS Dynamics CRM 2016 онлайн
Я попробовал оба способа получать доступ-маркер из Azure AD:
учетных данных клиента
import adal
token_response = adal.acquire_token_with_client_credentials(
'https://login.microsoftonline.com/abcdefgh-1234-5678-a1b1-morerandomstuff',
client_id,
secret
)
и пользователя/пароль
import adal
token_response = adal.acquire_token_with_username_password(
'https://login.microsoftonline.com/abcdefgh-1234-5678-a1b1-morerandomstuff',
'[email protected]_domain.com',
'my_password'
)
В обоих случаях token_response получает объект token, содержащий accessToken, refreshToken, expiresIn и т. Д. Поэтому я не думаю, что до этого момента есть ошибка.
Тогда я пытаюсь сделать простой запрос к веб-API:
headers = {'Authorization': '%s %s' % (token_response.get('tokenType'),
token_response.get('accessToken'))}
r = requests.get('https://domain.api.crm4.dynamics.com/api/data/v8.0/Product',
headers=headers)
Это всегда возвращает HTTP 401 - Несанкционированное: отказано в доступе.
('WWW-Authenticate', 'Bearer error=invalid_token,
error_description=Error during token validation!,
authorization_uri=https://login.windows.net/eabcdefgh-1234-5678-a1b1-morerandomstuff/oauth2/authorize,
resource_id=https://domain.api.crm4.dynamics.com/')
Пользователя, который пытается сделать запрос имеет привилегию Office-365-администратор и в CRM имеет все роли менеджера и роли администратора. Что по моему вкусу даже немного, но я где-то читал, что у пользователя должны быть привилегии администратора office-365. В Azure AD настроено приложение, которое имеет «делегированные права» для CRM («Access CRM Online в качестве пользователей организации»).
Что мне здесь не хватает? Или мой REST-get-request ошибочен? Microsoft документация для нового API практически не существует - каждый раз, когда вы нажимаете некоторую ссылку вы получаете документы для старых интерфейсов (API организации и т.д.)
Спасибо, я также нашел некоторые примеры код, чтобы заставить человек начали: HTTP: //jlattimer.blogspot.de/2015/11/crm-web-api-using-python.html – Chris
Для Ruby вместо Python ознакомьтесь с этим запросом Pull: https://github.com/visoft/ruby_odata/ pull/59 и, если возможно, использовать библиотеки Microsoft https://github.com/AzureAD/azure-activedirectory-library-for-ruby https://github.com/microsoftgraph/msgraph-sdk-ruby –