Я нашел ответ на свой вопрос. Это немного хакерски, но я сам проверил, и это работает. В качестве временного решения это поможет.
Подробности доступны здесь: https://community.dynamics.com/crm/f/117/t/255985
ADFS 3.0 поддерживает поток кода авторизации и это то, что мы будем использовать в этом случае.
Затем мы делаем следующий вызов с этой информацией, используя HttpClient.
var uri = $"{authProvider}authorize?response_type=code&client_id={clientId}&resource={redirectUri}&redirect_uri={redirectUri}";
var content = new FormUrlEncodedContent(new[] {
new KeyValuePair<string,string>("username",username),
new KeyValuePair<string,string>("password",password),
});
var responseResult = _httpManager.PostAsync(uri, content).Result;
Содержимым ответа будет HTML-страница (обычно помните, что этот поток запрашивает у пользователя страницу входа). На этой странице будет форма, которая содержит код авторизации. используя библиотеку типа HtmlAgilityPack, получить токен. Это хакерская часть решения.
- Теперь, когда у нас есть код авторизации, нам нужно получить токен доступа.
Для этого нам нужно сделать следующий звонок
var uri = $"{authProvider}token";
var content = new FormUrlEncodedContent(new[] {
new KeyValuePair<string,string>("grant_type","authorization_code"),
new KeyValuePair<string,string>("client_id",clientId),
new KeyValuePair<string,string>("redirect_uri",redirectUri),
new KeyValuePair<string,string>("code",code)
});
var response = await _httpManager.PostAsync(uri, content);
Содержимым ответа будет строка json, которая будет содержать токен доступа.
- Используя токен доступа, позвоните в CRM rest API.
Вам нужно будет прикрепить токен к HttpClient в заголовке как токен на предъявителя.
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer",token);
httpClient.DefaultRequestHeaders.Add("OData-MaxVersion", "4.0");
httpClient.DefaultRequestHeaders.Add("OData-Version", "4.0");
С этого момента вы можете совершать звонки в CRM API, и вы будете авторизованы. Однако будьте осторожны, обычно токены недолговечны. Вам нужно будет либо увеличить срок их службы, либо запрашивать новый токен каждый раз, когда он истекает.