Это один из немногих случаев, когда я обнаружил, что поток ROPC пригоден для использования.ADAL не предлагает перегрузки (в основном, поэтому люди не злоупотребляют этим потоком, я думаю), поэтому вам придется делать вызов вручную.Вот пример:
string tokenUrl = _authority + "oauth2/token";
var req = new HttpRequestMessage(HttpMethod.Post, tokenUrl)
{
Content = new FormUrlEncodedContent(new Dictionary<string, string>
{
["grant_type"] = "password",
["client_id"] = "your-clientid",
["client_secret"] = "your-clientsecret",
["resource"] = "resource-uri-or-client-id-of-api",
["username"] = "your-username",
["password"] = "your-password"
})
};
HttpResponseMessage res = await _client.SendAsync(req);
string json = await res.Content.ReadAsStringAsync();
AadTokenResponse tokenResponse = JsonConvert.DeserializeObject<AadTokenResponse>(json);
Класс ответа здесь довольно прост:
public class AadTokenResponse
{
[JsonProperty("access_token")]
public string AccessToken { get; set; }
}
Обратите внимание, это будет работать только в том случае, если у пользователя нет MFA, не требуется аутентификация сADFS и т. Д. Вы не должны использовать этот поток против производственного арендатора, только для тестового пользователя в тестовом арендаторе.По сути, вы получаете токен доступа для вызова API от имени пользователя без отображения экрана входа в систему.Это не должно использоваться для пропуска экрана входа в приложения.Однако я считаю, что это очень полезно для такого рода тестирования API.