gpt4 book ai didi

c# - 通过 EWS 托管 API 与 Exchange Online 交谈时刷新访问 token

转载 作者:太空宇宙 更新时间:2023-11-03 12:25:42 24 4
gpt4 key购买 nike

我正在编写一个应用程序以使用 EWS Managed API 与 Exchange Online 通信,并使用 ADAL 库通过 OAuth 2.0 验证我的应用程序。

访问 token 在 60 分钟后过期。之后我需要刷新访问 token 。目前,我在 StreamSubscriptionConnection OnNotificationEvent 处理程序以及我的 OnDisconnect 事件处理程序中使用以下代码刷新 OAuth 访问 token 。

private void OnNotificationEventHandler(object sender, NotificationEventArgs args)
{
exchangeService.Credentials = new OAuthCredentials(GetOAuthAccessToken().Result);

// Do my work
}

我还在我的 OnDisconnect 事件处理程序中添加了相同的刷新访问 token 代码,因为 StreamSubscriptionConnection 最多只保持打开 30 分钟。

private void OnDisconnectEventHandler(object sender, SubscriptionErrorEventArgs args)
{
exchangeService.Credentials = new OAuthCredentials(GetOAuthAccessToken().Result);
streamingSubscriptionConnection.Open();
}

这是我的访问 token 代码。

private async Task<string> GetOAuthAccessToken(PromptBehavior promptBehavior = PromptBehavior.Auto)
{
var authenticationContext = new AuthenticationContext(myAadTenant);

var authenticationResult = await authenticationContext.AcquireTokenAsync(exchangeOnlineServerName, myClientId, redirectUri, new PlatformParameters(promptBehavior));

return authenticationResult.AccessToken;
}

即使认为上述方法“有效”,我也觉得这不是处理这种情况的最佳方法,因为我非常需要确保在与 EWS 通信时刷新我的访问 token 。如果我添加另一个事件处理程序并且忘记在事件处理程序中添加 token 刷新逻辑,如果我的访问 token 过期但我需要在事件处理程序中调用 EWS,我可能会在处理该事件时收到 401。

上面的代码被简化了,每当我与 EWS 通信时我都可以 try catch ,如果我得到 401,我刷新我的访问 token 并重试,但这并没有解决我上面提到的不便。

我认为应该有更简单的方法来处理这个问题,但我还没有找到合适的文档。这是我在开发时引用的 Material 。 https://blogs.msdn.microsoft.com/webdav_101/2015/05/11/best-practices-ews-authentication-and-access-issues/

最佳答案

另一种方式是当您通过 EWS Managed API 与 Exchange 在线通信时,您需要提供 exchangeService 对象。并且您需要为每个请求捕获 401 异常,并且在获得此异常后,您需要重新设置 exchangeService 对象的 Credentials 属性或重新创建此对象.

关于c# - 通过 EWS 托管 API 与 Exchange Online 交谈时刷新访问 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45152163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com