Я пытаюсь получить доступ к Dynamics 2016 CRM OData Web API из консольного приложения.
У нас установлена Dynamics CRM 2016, настроена с проверкой подлинности на основе утверждений и с использованием AD FS версии 3.0.
Я понимаю, что консольное приложение (или веб-приложение) должно иметь доступ к веб-API с помощью встроенной проверки подлинности Windows (то есть NTML или Kerberos) без какой-либо специальной обработки... или, возможно, поток OAuth должен работать, когда он включен.
Для обычного пользователя, получающего доступ к страницам Dynamics, аутентификация работает нормально (перенаправление на страницу входа в систему AD FS), но доступ к API OData не работает (например: https://crm.domain.org/api/discovery/v8.0/):
- в браузере. Я получаю приглашение для входа в Windows и ввод действительных учетных данных всегда приводит к неавторизованной ошибке HTTP 401.
- в браузере, если я перейду к URL-адресу веб-API после, войдя в систему на страницах, тогда я могу получить доступ к веб-API (т.е. некоторые cookie файлы должны быть установлены, и я уже неявно разрешен )
- из кода, используя HttpClient с определенными действительными учетными данными (или текущими учетными данными), я также получаю 401
Вещи, которые я пробовал:
- Если я полностью отключить аутентификацию на основе утверждений, HttpClient отлично работает, и я могу получить доступ к API ODatali >
-
если я отключу проверку подлинности на основе утверждений, а активировать OAuth через PowerShell
Add-PSSnapin Microsoft.Crm.PowerShell ; $ClaimsSettings = Get-CrmSetting -SettingType OAuthClaimsSettings; $ClaimsSettings.Enabled = $true ; Set-CrmSetting -Setting $ClaimsSettings ;
.Встроенная проверка подлинности Windows по-прежнему не работает, но теперь возможно использование аутентификации на предъявителя. Я могу использовать этот фрагмент для получения конечной точки OAuth для генерации токена и использовать
AuthenticationContext.AcquireTokenAsync
, чтобы выпустить токен, а затем передать его в заголовкеAuthorization
HTTP... но затем, несмотря ни на что, я получаю эту ошибку:Bearer error=invalid_token, error_description =Error during token validation!, authorization_uri=https://our.adfs.domain.org/adfs/oauth2/authorize, resource_id=https://crm.domain.org/
Я что-то упустил? возможно, проблема конфигурации?