ADFS: получение токена программно - PullRequest
0 голосов
/ 04 марта 2019

Итак, мы создали набор функций Azure, защищенных ADFS (MSAL).

. Мы настроили приложение в ADFS и все это работало с нашим клиентом Android.

Теперь мы хотим провести некоторое тестирование API, поэтому мы хотим программно сгенерировать токены Auth для тестирования API

. Я не могу заставить работать следующий код вообще, возможно, у меня неверный идентификатор арендатора в приложенииconfig, это 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);

UPDATE

Поэтому изменил код набыть 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 Ответ

0 голосов
/ 05 марта 2019

Похоже, что предоставленный вами код использует ADAL вместо MSAL.

Основное отличие состоит в том, что с ADAL вы бы использовали AuthenticationContext для получения токенов, тогда как в MSAL вы используете ConfidentialClientApplication или PublicClientApplication, в зависимости от того, работает ли приложение вback-end или на устройстве пользователя.

Вот статья о Разницах между приложениями 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 .

...