Task:我需要创建一个 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),其中包含访问令牌。
Problem:AuthenticationResult 没有刷新令牌,因此我无法满足第一个限制。有什么解决办法或者over的办法吗?
附加问题:如何使用 Microsoft.Identity.Client 更新刷新令牌?
MSAL.NET 不公开刷新令牌,出于安全原因:MSAL 使用令牌缓存为您处理刷新令牌。
MSAL 维护令牌缓存并在获取令牌后对其进行缓存。它还能够在令牌接近过期时刷新令牌(如令牌缓存还包含刷新令牌).
您可以通过定期使用来提高应用程序的可用性强制刷新当设置为时,它将在内部获取新的访问令牌true
result = await app.AcquireTokenSilent(scopes, accounts.FirstOrDefault())
.WithForceRefresh(true)
.ExecuteAsync();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)