首页 > 解决方案 > AcquireTokenForClient (MSAL) 是否使用令牌缓存?

问题描述

我(成功地)使用带有 MSAL 的客户端凭据流来验证这样的应用程序:

private static async Task<AuthenticationResult> getAuthResultNonInteractively()
{
    string[] scopes = {"api://xxx/.default"};

    IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.CreateWithApplicationOptions(
            new ConfidentialClientApplicationOptions
            {
                TenantId = "xxx",
                ClientId = "xxx",
                RedirectUri = "http://localhost",
                ClientSecret = "xxx"
            })
        .Build();
    
    // Desired behaviour: acquires token online only if token does not 
    // exist in cache or is expired
    AuthenticationResult authResult = await app.AcquireTokenForClient(scopes)
        .ExecuteAsync();

    return authResult;
}

是否调用AcquireTokenForClientfirst 尝试在令牌缓存中查找令牌,并且仅当缓存中不存在令牌或令牌已过期时才在线获取它?还是它总是在线获取令牌?如果后者是真的,我需要改变什么才能获得所需的行为?

标签: c#msal

解决方案


AppTokenCache使用的 by与AcquireTokenForClient您的特定实例相关联IConfidentialClientApplication,因此为了利用令牌缓存,您IConfidentialClientApplication需要长期存在(即单例)。


推荐阅读