Мне не удается получить доступ к веб-API OData Dynamics 2016 CRM из консольного приложения.
У нас установлен Dynamics CRM 2016, настроенный с проверкой подлинности на основе утверждений и с использованием AD FS v3.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 OData
если я оставлю включенной проверку подлинности на основе утверждений и активирую 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/
Я что-то упускаю ? это возможно проблема конфигурации?