清空 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
,您也可以利用缓存。
我有以下简单的 .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
,您也可以利用缓存。