Пытаюсь разработать прототип приложения 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 моей компании? Или я могу что-нибудь сделать, чтобы выяснить, что пропало?
App.PublicClientApp
. - person Marc LaFleur   schedule 20.11.2017