AcquireTokenSilentAsync无法验证用户身份

时间:2018-05-14 17:42:49

标签: asp.net-mvc microsoft-graph msal

我正在尝试获取静默令牌请求以初始化ConfidentialClientApp对象,如“Microsoft Graph SDK ASPNET Connect”项目中所述,并在Add sign-in with Microsoft to an ASP.NET web app中列出

我的代码镜像上面的示例,我希望我的调用将返回一个成功的结果,并且可以访问。

var result = await cca.AcquireTokenSilentAsync(graphScopes, cca.Users.First());

return result.AccessToken;

但是,我收到一个错误,表示用户需要进行身份验证。我不确定我在其中使用的示例中缺少什么。

1 个答案:

答案 0 :(得分:1)

如果已经为该用户提供了包含您请求的范围的缓存令牌,那么您只能静默获取该令牌(它可以包含更多,但它至少需要您提出的要求)。

这就是AcquireTokenSilentAsync应始终包含在Try / Catch块中的原因。如果找不到匹配的令牌,则需要启动交互式流程。以下是MSAL Wiki

中的示例
AuthenticationResult result = null;
try
{
    result = await app.AcquireTokenSilentAsync(scopes, app.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
    {
        result = await app.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 (result != null)
{
    string accessToken = result.AccessToken;
    // Use the token
}