pra*_*ria 3 c# azure exchangewebservices azure-active-directory azure-ad-msal
我已经确定了两种在 EWS 的 MSAL 中获取令牌的方法
在我获取令牌后的上述两种方法中,我无法刷新它。虽然我尝试遵循 MS 文档但没有成功。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();
Run Code Online (Sandbox Code Playgroud)
谁能指导我为什么会这样,或者有没有文档解释这个流程。
MSAL 维护令牌缓存并在获取令牌后对其进行缓存。它还能够在令牌接近过期时刷新令牌(因为令牌缓存还包含刷新令牌)。
出于安全原因, MSAL.NET 不会公开刷新令牌:MSAL 使用令牌缓存为您处理刷新令牌。
由于您GetAccountsAsync()总是变空,因此您的令牌缓存序列化了。
默认情况下,访问令牌会在 1 小时后过期,如果令牌过期时 AAD 正忙,您的应用程序将变得不可用,因为您无法获取有效的访问令牌。您可以通过定期强制刷新来提高应用程序的可用性。我们建议每 30 分钟强制刷新一次,如果这是自定义生命周期,则为 AT 生命周期的一半。
result = await app.AcquireTokenSilent(scopes, accounts.FirstOrDefault())
.WithForceRefresh(true)
.ExecuteAsync();
Run Code Online (Sandbox Code Playgroud)