Аутентификация UWP Azure AD для Graph API

Пытаюсь разработать прототип приложения UWP, которое получает доступ к базовой информации о других людях, работающих в моей компании, с помощью API Microsoft Graph.

Для аутентификации я использую пакет Microsoft.Identity.Client NuGet, он же MSAL для получения токена OAuth.

Я создал собственный Converged application на новом портале приложений. Я вошел на портал, используя свой рабочий адрес электронной почты, и при его просмотре в приложении есть примечание, в котором говорится: «Это приложение будет зарегистрировано в экземпляре Azure Active Directory, используемом для управления вашей учетной записью [email protected]». . Я не вижу, чтобы это приложение было зарегистрировано в моем рабочем экземпляре Azure AD на портале Azure.

Я использую его ClientID в своем приложении. Он имеет следующие перенаправления t:

  • urn:ietf:wg:oauth:2.0:oob
  • https://login.microsoftonline.com/common/oauth2/nativeclient
  • e7b70686-d176-4a1c-aae6-151221fafe0e://auth

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

Мы не можем подключиться к нужному вам сервису прямо сейчас. Проверьте подключение к сети или повторите попытку позже.

Я могу успешно войти в Graph Explorer со своим рабочим адресом электронной почты. а затем получить доступ к Graph API, чтобы получить доступ к необходимой мне информации.

Я пытался запустить Fiddler, чтобы узнать, куда пытается перейти всплывающее окно, но запуск Fiddler останавливает его работу вообще.

Я использую active-directory-dotnet-native-uwp- демонстрационное приложение v2 от Microsoft, чтобы попытаться заставить работать аутентификацию:

Ниже приведен метод, который регистрирует пользователя:

/// <summary>
/// Call AcquireTokenAsync - to acquire a token requiring user to sign-in
/// </summary>
private async void CallGraphButton_Click(object sender, RoutedEventArgs e)
{
    AuthenticationResult authResult = null;
    ResultText.Text = string.Empty;
    TokenInfoText.Text = string.Empty;

    try
    {
        authResult = await App.PublicClientApp.AcquireTokenSilentAsync(scopes, App.PublicClientApp.Users.FirstOrDefault());
    }
    catch (MsalUiRequiredException ex)
    {
        // A MsalUiRequiredException happened on AcquireTokenSilentAsync. This indicates you need to call AcquireTokenAsync to acquire a token
        System.Diagnostics.Debug.WriteLine($"MsalUiRequiredException: {ex.Message}");

        try
        {
            authResult = await App.PublicClientApp.AcquireTokenAsync(scopes);
        }
        catch (MsalException msalex)
        {
            ResultText.Text = $"Error Acquiring Token:{System.Environment.NewLine}{msalex}";
        }
    }
    catch (Exception ex)
    {
        ResultText.Text = $"Error Acquiring Token Silently:{System.Environment.NewLine}{ex}";
        return;
    }

    if (authResult != null)
    {
        ResultText.Text = await GetHttpContentWithToken(graphAPIEndpoint, authResult.AccessToken);
        DisplayBasicTokenInfo(authResult);
        this.SignOutButton.Visibility = Visibility.Visible;
    }
}

Строка App.PublicClientApp.AcquireTokenAsync(scopes) вызывает всплывающее окно.

Ниже приведена строка, которая создает App.PublicClientApp:

public static PublicClientApplication PublicClientApp { get; } = new PublicClientApplication(ClientId);

Есть ли что-то еще, что мне нужно сделать, чтобы Microsoft.Identity.Client работало с AD моей компании? Или я могу что-нибудь сделать, чтобы выяснить, что пропало?


person Connel    schedule 20.11.2017    source источник
comment
Не могли бы вы добавить код, который вы используете, и сведения о регистрации вашего приложения?   -  person Marc LaFleur    schedule 20.11.2017
comment
Я использую следующее демонстрационное приложение, чтобы попытаться заставить работать аутентификацию: github.com/Azure-Samples/active-directory-dotnet-native-uwp-v2 Какие сведения о регистрации приложения вам нужны? Я добавил перенаправления к вопросу.   -  person Connel    schedule 20.11.2017
comment
Хм, разве вам не следует использовать портал приложений v2 для определения приложения, если вы хотите использовать конечные точки v2 (MSAL)? Вы можете найти его на странице apps.dev.microsoft.com.   -  person juunas    schedule 20.11.2017
comment
Я пытался создать приложение как на портале Azure, так и на новом портале приложений. Оба дают мне одно и то же сообщение об ошибке. Когда я создаю приложение на новом портале, оно не отображается на портале Azure по сравнению с экземпляром AD на странице регистрации приложений. Это нормально?   -  person Connel    schedule 20.11.2017
comment
Я обновил вопрос, чтобы охватить сценарий конвергентного приложения.   -  person Connel    schedule 20.11.2017
comment
В версии 2 вы ничего не увидите в своем арендаторе, пока он не будет авторизован, так что это нормально. В чем ценность прицелов? Это также помогло бы увидеть, как строится App.PublicClientApp.   -  person Marc LaFleur    schedule 20.11.2017
comment
Вы можете увидеть создание ClientApp здесь: github.com/Azure-Samples/active-directory-dotnet-native-uwp-v2/ Я также добавлю это к вопросу .   -  person Connel    schedule 21.11.2017
comment
Вероятно, это не ваша проблема, но почему у вас есть 2 других URI перенаправления в вашей конфигурации выше? urn:ietf:wg:oauth:2.0:oob должно быть достаточно. На самом деле второй вариант просто неверен, так как это конечная точка, которой владеет Microsoft (а не ваше приложение).   -  person Dan Kershaw - MSFT    schedule 24.11.2017
comment
Я создал приложение как конвергентное приложение, используя новый портал. Он дает вам первые два перенаправления по умолчанию. Он также случайным образом создает окончательный идентификатор GUID для каждого создаваемого вами приложения. Конвергентные приложения позволяют пользователям входить в систему со своими учетными записями Microsoft, а также с предварительными учетными записями AD, поэтому я думаю, что имеет смысл, что они оба там.   -  person Connel    schedule 24.11.2017


Ответы (1)


Пожалуйста, попробуйте следующее:

  1. Убедитесь, что в вашем приложении включены следующие настройки:

    • Enterprise Authentication
    • Частные сети (клиент и сервер)
    • Общие сертификаты пользователей
  2. Найдите URL-адрес перенаправления следующим образом:

    • Discover the callback URI for your app by adding the following like and setting a breakpoint on:
var redirectURI = Windows.Security.Authentication.Web.WebAuthenticationBroker.GetCurrentApplicationCallbackUri();
  • Запустите приложение и скопируйте значение redirectUri при достижении точки останова. Значение должно выглядеть примерно так:

    ms-app://s-1-15-2-1352796503-54529114-405753024-3540103335-3203256200-511895534-1429095407/

    1. Add a RedirectUri with the value returned in the Application Registration Portal
person Andre Teixeira    schedule 22.01.2018
comment
Извините за нуб, но как мне найти портал регистрации приложений? - person Amir Hajiha; 15.12.2020