Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc AcquireTokenSilentAsync无法对用户进行身份验证_Asp.net Mvc_Microsoft Graph Api_Msal - Fatal编程技术网

Asp.net mvc AcquireTokenSilentAsync无法对用户进行身份验证

Asp.net mvc AcquireTokenSilentAsync无法对用户进行身份验证,asp.net-mvc,microsoft-graph-api,msal,Asp.net Mvc,Microsoft Graph Api,Msal,我正在尝试获取静默令牌请求,以初始化“Microsoft Graph SDK ASPNET Connect”项目中的SecretentialClientApp对象,如中所述 通过我的代码镜像上述示例,我希望我的调用将返回一个成功的结果,并访问 var result = await cca.AcquireTokenSilentAsync(graphScopes, cca.Users.First()); return result.AccessToken; 但是,我得到一个错误,它说用户需要进行

我正在尝试获取静默令牌请求,以初始化“Microsoft Graph SDK ASPNET Connect”项目中的
SecretentialClientApp
对象,如中所述

通过我的代码镜像上述示例,我希望我的调用将返回一个成功的结果,并访问

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

return result.AccessToken;

但是,我得到一个错误,它说用户需要进行身份验证。我不确定我在这些示例中遗漏了什么。如果该用户已经有一个缓存令牌,其中包含您请求的作用域,则只能以静默方式获取该令牌(它可以有更多,但至少需要有您请求的)

这就是为什么
AcquireTokenSilentAsync
应始终包装在Try/Catch块中的原因。如果找不到匹配的令牌,则需要启动一个交互式流。以下是来自以下方面的示例:


对此进行了一些调整,我就能够使我的工作流程达到预期的行为。谢谢Marc,如果是aspnetcore web应用程序,你会怎么做?
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
}