清空 MSAL 令牌缓存

Empty MSAL token cache

我有以下简单的 .NET 脚本:

static void Main(string[] args)
{
    var result1 = Login().Result;
    var result2 = Login().Result;
}

public static async Task<AuthenticationResult> Login()
{
    var options = new PublicClientApplicationOptions();
    options.TenantId = "...";
    options.ClientId = "...";

    var app = PublicClientApplicationBuilder.CreateWithApplicationOptions(options)
                    .WithDefaultRedirectUri()
                    .Build();

    AuthenticationResult result;
    var accounts = await app.GetAccountsAsync();
    IAccount account = accounts.FirstOrDefault();
    var scopes = new string[] { "..." };
    try
    {
        result = await app.AcquireTokenSilent(scopes, account).ExecuteAsync();
    }
    catch (MsalUiRequiredException)
    {
        result = await app.AcquireTokenInteractive(scopes).ExecuteAsync();
    }
    return result;
}

我的期望是第一个 Login(...) 调用执行交互式身份验证,然后第二个调用 var accounts = await app.GetAccountsAsync() returns 之前登录的帐户。但是,帐户没有任何项目。所以,令牌缓存似乎不是这些调用的一部分。

有什么方法可以保存第一次调用的登录账号吗?应该不是自动的吧?

我遇到了同样的问题,在使用 ilspy 探索 MSAL 库之后,我发现缓存存储在 IPublicClientApplication 应用程序中。

因此,如果您重复使用 app,您也可以利用缓存。