我有以下简单的 .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() 返回之前登录的帐户。但是,这些帐户没有任何项目。因此,似乎令牌缓存不是这些调用的一部分。
有没有办法在第一次通话中存储登录的帐户?不应该是自动的吗?