#azure #adfs #msal
#azure #adfs #azure-ad-msal
Вопрос:
Итак, мы создали набор функций Azure, защищенных ADFS (MSAL)
Мы настроили приложение в ADFS, и все это хорошо работает с нашим клиентом Android.
Теперь мы хотим провести некоторое тестирование API, поэтому мы хотим программно сгенерировать токены аутентификации для тестирования API
Я вообще не могу заставить следующий код работать, возможно, у меня неверный идентификатор клиента, в конфигурации приложения это GUID (42b03d0b-d7f2-403e-b764-0dbdcf0505f6), но примеры говорят, что это наш домен
string userName = "-";
string password = "-";
string clientId = "ee13c922-bf4b-4f0a-ba39-ea74e1203c6e";
var credentials = new UserPasswordCredential(userName, password);
var authenticationContext = new AuthenticationContext("https://login.microsoftonline.com/acostaonline.onmicrosoft.com");
var result = await authenticationContext.AcquireTokenAsync("https://graph.windows.net", clientId, credentials);
Обновить
Поэтому изменил код на MSAL и все еще пытаюсь войти в систему с помощью имени пользователя и пароля. Теперь просто истекает время ожидания
string authority = "https://login.microsoftonline.com/42b03d0b-d7f2-403e-b764-0dbdcf0505f6/";
string[] scopes = new string[] { "user.read" };
PublicClientApplication app = new PublicClientApplication("ee13c922-bf4b-4f0a-ba39-ea74e1203c6e", authority);
var accounts = await app.GetAccountsAsync();
Microsoft.Identity.Client.AuthenticationResult result = null;
if (accounts.Any())
{
result = await app.AcquireTokenSilentAsync(scopes, accounts.FirstOrDefault());
}
else
{
try
{
var securePassword = new SecureString();
foreach (char c in "PASSWORD") // you should fetch the password keystroke
securePassword.AppendChar(c); // by keystroke
result = await app.AcquireTokenByUsernamePasswordAsync(scopes, "AUSER@acosta.com",
securePassword);
}
}
Ошибка
Исключение SocketException: попытка подключения завершилась неудачей, поскольку подключенная сторона не ответила должным образом по истечении определенного периода времени, или сбой установленного соединения произошел из-за того, что подключенный хост не смог ответить 172.26.200.77:443
Ответ №1:
Похоже, что предоставленный вами код использует ADAL вместо MSAL.
Основное отличие заключается в том, что с ADAL
вы будете использовать AuthenticationContext
для получения токенов, тогда как в MSAL
вы используете ConfidentialClientApplication
or PublicClientApplication
, в зависимости от того, запущено ли приложение в серверной части или на устройстве пользователя.
Вот статья о различиях между ADAL.NET и MSAL.NET приложения.
При использовании MSAL.Net чтобы получить токен для Microsoft Graph API, вы могли бы использовать следующий код:
public static PublicClientApplication PublicClientApp = new
PublicClientApplication(ClientId);
var app = App.PublicClientApp;
ResultText.Text = string.Empty;
TokenInfoText.Text = string.Empty;
var accounts = await app.GetAccountsAsync();
authResult = await app.AcquireTokenSilentAsync(_scopes, accounts.FirstOrDefault());
Для получения более подробной информации вы можете обратиться к этой статье, в меню слева также представлены Android и iOS.
Комментарии:
1. Итак, вы не можете сделать это программно, используя имя пользователя и пароль для таких вещей, как тестирование API.
2. С помощью ADAL? Или с помощью MSAL?
3. Не могли бы вы показать более подробную информацию о вашем тайм-ауте? Операция обновления токена или просто при получении токена?
4. @Burf2000 Есть ли брандмауэр в вашей локальной сети или интрасети? И доступ к Интернету через прокси-сервер?