如何在MSAL .Net C#中获取刷新令牌

问题描述 投票:0回答:1

我已经确定了两种在EWS的MSAL中获取令牌的方法

  1. 使用用户名密码方法。
  2. 使用守护程序机密方法。

在获得令牌后,上述两种方法都无法刷新。虽然我尝试遵循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();

谁能指导我为什么会这样,或者有文档解释这种情况。

c# azure azure-active-directory exchangewebservices msal
1个回答
1
投票

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();
© www.soinside.com 2019 - 2024. All rights reserved.