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

使用C#登录Azure AD。获取刷新令牌和访问令牌,c#,oauth,azure-active-directory,C#,Oauth,Azure Active Directory,任务:我需要创建一个WPF应用程序,它将与EWS(Exchange web服务)一起工作。一、 此外,还有两个限制: 登录只应继续一次(应使用刷新令牌重新连接) 它应该支持2FA 我的解决方案部分:我使用OAuth连接到Azure AD。作为OAuth客户端,我使用Microsoft.Identity.client。对于第一次登录,我有这样的代码: var pcaOptions = new PublicClientApplicationOptions { ClientId = *my

任务:我需要创建一个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更新刷新令牌?

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

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

通过定期使用,您可以提高应用程序的可用性。当设置为
true

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

谢谢你的回答!如果一个帐户有MFA,并且UserTokenCache已经有一个反序列化的信息,那么下一个代码会正常工作吗?刷新代码是否过期?如果是,刷新令牌的生存期是多少,在它改变之前?默认情况下,访问令牌在1h后过期。因此,建议每30分钟强制刷新一次,或者在自定义生存期时强制刷新AT生存期的一半。刷新令牌的默认值为90天,14天不活动滑动窗口。刷新令牌在90天(以及14天不活动)后过期后会发生什么?这是变化吗?或者它变为非活动状态?用户必须重新登录才能获得新的访问和刷新令牌。刷新令牌是否有可能在当前会话的90天内更改?