Вы можете использовать поток ROP C для получения токенов для тестов. Это один из случаев, когда использование этого потока может быть в порядке, на мой взгляд. Использование его для обхода экрана входа в обычное приложение не совсем нормально. Он также не работает со всеми видами пользователей, федеративные пользователи могут иногда работать, в зависимости от того, как он настроен.
Вот что я использовал:
// _authority = e.g. https://login.microsoftonline.com/company.com
string tokenUrl = _authority + "oauth2/v2.0/token";
var req = new HttpRequestMessage(HttpMethod.Post, tokenUrl)
{
Content = new FormUrlEncodedContent(new Dictionary<string, string>
{
["grant_type"] = "password",
["client_id"] = settings.ClientId, // client id for your app
["client_secret"] = settings.ClientSecret, // client secret for your app
["scope"] = $"openid profile {_resourceUri}/.default", // here you define what you want tokens for
["username"] = settings.UserName,
["password"] = settings.Password
})
};
HttpResponseMessage res = await _client.SendAsync(req);
string json = await res.Content.ReadAsStringAsync();
AadTokenResponse tokenResponse = JsonConvert.DeserializeObject<AadTokenResponse>(json);
// tokenResponse.IdToken contains the ID token
// The AadTokenResponse class:
class AadTokenResponse
{
[JsonProperty("access_token")]
public string AccessToken { get; set; }
[JsonProperty("id_token")]
public string IdToken { get; set; }
}
Область действия где вы должны указать хотя бы область действия openid
для получения идентификатора токена. Здесь я также указал идентификатор приложения API URI + "/.default", чтобы получить токен доступа для API. Вы можете оставить область действия openid profile
, если вам нужен только токен идентификатора.
Имейте в виду, что вам потребуется защитить учетные данные приложения и учетные данные пользователя в тестовой конфигурации. Кроме того, я рекомендую, чтобы эти учетные данные были , а не для производственной среды. Вам может понадобиться создать облачные учетные записи пользователей для их правильной работы. Кроме того, учетные записи пользователей не могут быть включены MFA. Если срок действия их пароля истекает, вам необходимо установить новый пароль и обновить тестовую конфигурацию.