我已经确定了两种在EWS的MSAL中获取令牌的方法
在获得令牌后,上述两种方法都无法刷新。虽然我尝试遵循MS docs,但是没有成功。 GetAccountsAsync()始终给出空结果。
这是我的用户名密码方法代码
var publicClientApplication = PublicClientApplicationBuilder.Create(ClientId)
.WithAuthority(AzureCloudInstance.AzurePublic, TenantId).Build();
var accounts = publicClientApplication.GetAccountsAsync().GetAwaiter().GetResult();
var result = publicClientApplication
.AcquireTokenSilent(scopes, accounts.FirstOrDefault())
.ExecuteAsync().GetAwaiter().GetResult();
谁能指导我为什么会这样,或者有文档解释这种情况。
MSAL维护令牌高速缓存,并在获取令牌后对其进行高速缓存。它还可以在即将到期时刷新令牌(因为令牌缓存还包含刷新令牌)。
MSAL.NET不公开刷新令牌,出于安全原因:MSAL使用令牌缓存为您处理刷新令牌。
由于您GetAccountsAsync()
总是空着,所以Token Cache serialization也没有。
默认情况下,访问令牌在1小时后过期,如果令牌过期时AAD忙,则您的应用程序将变得不可用,因为您无法获取有效的访问令牌。您可以通过定期forcing a refresh来提高应用程序的可用性。我们建议每30分钟(或AT寿命的一半)强制刷新一次,这是自定义寿命。
result = await app.AcquireTokenSilent(scopes, accounts.FirstOrDefault())
.WithForceRefresh(true)
.ExecuteAsync();