C# AdalSilentTokenAcquisitionException尝试在c中获取令牌时发生#

C# AdalSilentTokenAcquisitionException尝试在c中获取令牌时发生#,c#,azure-active-directory,C#,Azure Active Directory,我正试图使用acquireTokenSilentAsync连接到我的azure应用程序,但我遇到一个异常,代码如下: public class Oauth { public const string OAuthHeader = "Authorization"; public static String GetUserAccessTokenAsync() { AuthenticationResul

我正试图使用
acquireTokenSilentAsync
连接到我的azure应用程序,但我遇到一个异常,代码如下:

public class Oauth
    {
        public const string OAuthHeader = "Authorization";
        public static  String GetUserAccessTokenAsync()
        {
            AuthenticationResult result = null;
            string aadTenant = TestConfiguration.Default.ActiveDirectoryTenant;
            string aadClientAppId = TestConfiguration.Default.ActiveDirectoryClientAppId;
            string aadResource = TestConfiguration.Default.ActiveDirectoryResource;

            var authenticationContext = new AuthenticationContext(aadTenant, TokenCache.DefaultShared);

            result = authenticationContext.AcquireTokenSilentAsync(aadResource, aadClientAppId).Result;

            if (result != null)
            {
                var accessToken = result.AccessToken;
                // Use the token
                return accessToken;
            }
            else
            {
                return "";
            }
        }
    }
我在这一行下面遇到了一个错误:

result = authenticationContext.AcquireTokenSilentAsync(aadResource, aadClientAppId).Result;
AdalSilentTokenAcquisitionException:无法以静默方式获取令牌,因为在缓存中找不到令牌。调用方法AcquireToken


怎么了?

当您尝试以静默方式获取令牌时,它将从令牌缓存中获取令牌或以静默方式使用refreshToken。因此,当缓存中没有令牌时,AdalException返回。你可以参考这个

注意
AcquireTokenSilent
不需要在客户端中调用 凭据流(当应用程序在没有用户的情况下获取令牌时, 但以自己的名义)

请注意
AcquireTokenSilent
可能会因以下几种原因而失败,例如 缓存不包含用户的令牌,或者该令牌已过期 并且无法刷新

try
{
    result = await ac.AcquireTokenSilentAsync(resource, clientId);
}
catch (AdalException adalException)
{
    if (adalException.ErrorCode == AdalError.FailedToAcquireTokenSilently
        || adalException.ErrorCode == AdalError.InteractionRequired)
    {
        result = await ac.AcquireTokenAsync(resource, clientId, redirectUri,
                                       new PlatformParameters(PromptBehavior.Auto));
    }
}