用于Graph API的UWP Azure AD身份验证

时间:2017-11-20 15:14:31

标签: microsoft-graph msal

尝试开发一个UWP原型应用程序,该应用程序使用Microsoft Graph API访问有关为我公司工作的其他人的基本信息。

要进行身份验证我正在使用Microsoft.Identity.Client NuGet包,又称MSAL来获取OAuth令牌。

我在新App Portal中创建了原生Converged application。我使用我的工作电子邮件地址登录了门户网站,当我查看该应用程序时会显示“此应用程序将在用于管理您的connel.hooley@modalitysystems.com帐户的Azure Active Directory实例中注册”。 。我无法在Azure门户中看到此应用程序在我的工作Azure AD实例中注册。

我在我的应用中使用了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运行阻止了它的工作。

我正在使用Microsoft的active-directory-dotnet-native-uwp-v2演示应用程序试图让auth正常工作:

以下是记录用户的方法:

/// <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一起工作吗?或者我可以做些什么来调查缺少的东西?

1 个答案:

答案 0 :(得分:0)

请尝试以下方法:

  1. 确保在您的应用上启用以下设置:

    • 企业身份验证
    • 专用网络(客户端和服务器)
    • 共享用户证书
  2. 按以下方式查找重定向网址:

    • 通过添加以下内容并在以下位置设置断点来发现应用的回调URI:
  3. body, html {
        line-height: 15px;
    }
    
    • 运行应用程序,并在命中断点时复制redirectUri的值。该值应类似于以下内容:

      MS-应用程式:// S-1-15-2-1352796503-54529114-405753024-3540103335-3203256200-511895534-1429095407 /

      1. 使用应用程序注册门户中返回的值添加RedirectUri