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



任务:我需要创建一个WPF应用程序,它将与EWS(Exchange Web-service(一起使用。我也有 2 个限制:

  • 登录应仅进行一次(应使用刷新令牌重新连接(
  • 它应该支持 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(,其中包含访问令牌。

问题:身份验证结果没有刷新令牌,因此我无法满足第一个限制。是否有任何解决方案或方法?

其他问题:如何使用 Microsoft.Identity.Client 更新刷新令牌?

出于安全原因,MSAL.NET 不会公开刷新令牌:MSAL 使用令牌缓存为你处理刷新令牌。

MSAL 维护令牌缓存,并在获取令牌后缓存令牌。它还能够在令牌即将过期时刷新令牌(因为令牌缓存还包含刷新令牌(。

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

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

最新更新