@tracertong Я имею в виду, что я создал пользователя в AD, который не принадлежит ни одному реальному пользователю, а использует только его имя пользователя и пароль в моем приложении. Вот почему я называю его системным пользователем.

я есть веб-приложение, которое должно общаться с Dynamic CRM 365 Web API. Динамическая CRM настроена в качестве проверяющей стороны в ADFS. Сервер - Windows Server 2016, и все находится в помещении, а не в Azure.

Что я сделал для получения действительного токена:

1) В ADFS зашли в группы приложений и добавили новое серверное приложение, взяли ClientID, а также сгенерировали Client Secret для моего веб-приложения.

2) Добавить нового пользователя в Active Directory через webAppUser

3) Добавить этого пользователя какПользователь приложения в CRM с идентификатором приложения ClientID, который я получил ранее, когда я зарегистрировал свое веб-приложение в ADFS. Также создана новая роль с полными разрешениями для учетной записи сущности и назначьте эту роль этому пользователю приложения.

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, я все равно получаю 401 Unauthorized.

Не могли бы вы мне помочь? Я на правильном пути? Должен ли я сделать что-нибудь еще?

Ответы на вопрос(1)

Ваш ответ на вопрос