任务:我需要创建一个WPF应用程序,该应用程序可以与EWS(Exchange Web服务)一起使用。我也有两个限制:
我的解决方案部分::我使用OAuth连接到Azure AD。作为OAuth客户端,我使用Microsoft.Identity.Client。对于第一次登录,我有这样的代码:
var pcaOptions = new PublicClientApplicationOptions
{
ClientId = *my_client_id*,
TenantId = *my_tenant*
};
AuthenticationResult authResult = pca.AcquireTokenInteractive(ewsScopes).ExecuteAsync().Result;
这部分代码显示了一个WPF窗口,我在其中输入凭据并返回一个包含访问令牌的结果(AuthenticationResult)。
问题::AuthenticationResult没有刷新令牌,因此我无法满足第一个限制。有什么解决办法还是可以解决的?
其他问题:如何使用Microsoft.Identity.Client更新刷新令牌?
答案 0 :(得分:1)
出于安全考虑,MSAL.NET不公开刷新令牌:MSAL通过令牌缓存为您处理刷新令牌。
MSAL维护令牌高速缓存,并在获取令牌后对其进行高速缓存。当令牌即将到期时,它还可以刷新令牌(因为令牌缓存还包含刷新令牌)。
您可以通过定期使用WithForceRefresh来提高应用程序的可用性,当设置为true
时,它将在内部获取新的访问令牌
result = await app.AcquireTokenSilent(scopes, accounts.FirstOrDefault())
.WithForceRefresh(true)
.ExecuteAsync();