使用C#登录Azure AD。获取刷新令牌和访问令牌

时间:2020-06-24 16:44:12

标签: c# oauth azure-active-directory

任务:我需要创建一个WPF应用程序,该应用程序可以与EWS(Exchange Web服务)一起使用。我也有两个限制:

  • 登录仅应进行一次(应使用刷新令牌重新连接)
  • 它应该支持2FA

我的解决方案部分::我使用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更新刷新令牌?

1 个答案:

答案 0 :(得分:1)

出于安全考虑,MSAL.NET不公开刷新令牌:MSAL通过令牌缓存为您处理刷新令牌。

MSAL维护令牌高速缓存,并在获取令牌后对其进行高速缓存。当令牌即将到期时,它还可以刷新令牌(因为令牌缓存还包含刷新令牌)。

您可以通过定期使用WithForceRefresh来提高应用程序的可用性,当设置为true时,它将在内部获取新的访问令牌

result = await app.AcquireTokenSilent(scopes, accounts.FirstOrDefault())
             .WithForceRefresh(true)
             .ExecuteAsync();