Как вы используете AcquireTokenSilentAsync для аутентификации пользователя? - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь программно авторизовать приложение Azure с присоединенного компьютера Azure AD.

Если я перехожу по URL-адресу приложения в Internet Explorer, он может проверить зарегистрированную учетную запись пользователя.

Мой текущий код выглядит примерно так:

using Microsoft.IdentityModel.Clients.ActiveDirectory;

AuthenticationContext context = new AuthenticationContext("https://login.microsoftonline.com/TENANTGUID");
Uri uri = new Uri("urn:ietf:wg:oauth:2.0:oob");
var pparams = new PlatformParameters(PromptBehavior.Auto, null);
AuthenticationResult result = await context.AcquireTokenAsync("https://graph.windows.net", "1950a258-227b-4e31-a9cf-717495945fc2", uri, pparams);

Этот вызов выполнен успешно, но я хочу получить токен для текущего пользователя, вошедшего в систему.

Первые два параметра AcquireTokenAsync вызовы resource и clientid.

Я могу получить URL-адрес домашней страницы и идентификатор приложения для приложения, к которому я хочу получить доступ, но не могу найти комбинацию из двух работающих.

Какие параметры я должен передать этой функции для автоматической проверки вошедшего в систему пользователя и получения заголовка авторизации, который можно использовать при последующих вызовах приложения?

1 Ответ

0 голосов
/ 02 декабря 2018

Я бы посоветовал вам сейчас MSAL.NET Встроенная проверка подлинности Windows для компьютеров, подключенных к домену или AAD:

код будет выглядеть примерно так:

static async Task GetATokenForGraph()
{
 string tenant = "contoso.com" // can also be a GUID or organizations for multi-tenant
 string authority = $"https://login.microsoftonline.com/{tenant}";
 string[] scopes = new string[] { "user.read" };
 PublicClientApplication app = new PublicClientApplication(clientId, authority);
 var accounts = await app.GetAccountsAsync();

 AuthenticationResult result=null;
 if (accounts.Any())
 {
 result = await app.AcquireTokenSilentAsync(scopes, accounts.FirstOrDefault());
 }
 else
 {
  try
  {
   result = await app.AcquireTokenByIntegratedWindowsAuthAsync(scopes);
  }
  catch (MsalUiRequiredException ex)
   { 
    // For details see the article 
...