У меня есть веб-приложение, которому необходимо поговорить с API-интерфейсом Dynamic CRM 365. Динамический CRM настроен как вспомогательная сторона в ADFS. Сервер - это Windows Server 2016, и все находится в помещении, а не на Azure.
То, что я сделал для получения действительного токена, следующее:
1) В ADFS перешли в группы приложений и добавили новое серверное приложение, взяли ClientID и также создали клиентский секрет для моего веб-приложения.
2) Добавить нового пользователя в Active Directory webAppUser
3) Добавьте этого пользователя как пользователя приложения в CRM с идентификатором приложения ClientID, который я получил ранее, когда зарегистрировал свое веб-приложение в ADFS. Также была создана новая роль с полными разрешениями для учетной записи Entity и назначить эту роль этому пользователю приложения
4) Я использую приведенный ниже код для получения токена-носителя и добавления его в заголовок авторизации HttpClient.
public class CrmWebApiClient
{
private HttpClient _httpClient;
public CrmWebApiClient()
{
_httpClient = new HttpClient();
_httpClient.BaseAddress = new Uri("https://crmbaseaddress.com");
}
internal async Task Initialize()
{
try
{
var authority = "https://adfsServerUrl/adfs/";
var authContext = new AuthenticationContext(authority,false);
var credentials = new ClientCredential(clientID,clientSecret);
var authResult = await authContext.AcquireTokenAsync("https://crmbaseaddress.com", credentials);
_httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", authResult.AccessToken);
}
catch (Exception ex)
{
var error = ex;
}
}
internal async Task<string> GetValuesAsync()
{
var result = string.Empty;
try
{
result = await _httpClient.GetStringAsync("api/data/v8.1/accounts");
}
catch (Exception ex)
{
var error = ex;
}
return result;
}
}
5) Мне удается получить токен, но когда я вызываю CRM Web Api, я все равно получаю 401 Unauthorized.
Вы можете мне помочь? Я на правильном пути? Должен ли я сделать что-нибудь еще?