gpt4 book ai didi

c# - 使用 OAuth 的 Office 365/EWS 身份验证

转载 作者:行者123 更新时间:2023-11-30 14:30:24 24 4
gpt4 key购买 nike

我正在尝试使用 OAuth 和 EWS 托管 API 登录 Office 365 Exchange Online。

我能够使用连接到 Office 365 Web API (REST),因此我确实拥有来自 Active Directory 身份验证库 (ADAL) 的有效 token 。

现在,我正在尝试使用 EWS 和 TokenCredentials 进行连接。

我认为代码非常简单:

public static ExchangeService ConnectToServiceWithImpersonation(string token)
{
var service = new ExchangeService(ExchangeVersion.Exchange2013_SP1);

if (true)
{
service.TraceListener = new TraceListener();
service.TraceFlags = TraceFlags.All;
service.TraceEnabled = true;
}

var credentials = new TokenCredentials(token);

service.Credentials = credentials;

service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
return service;
}

token 由 ADAL 生成,ADAL 又来自使用“Office 365 API 工具 - 预览版”的示例代码

// Obtain information for communicating with the service:
Office365ServiceInfo serviceInfo = Office365ServiceInfo.GetExchangeServiceInfo();
if (!serviceInfo.HasValidAccessToken)
{
return Redirect(serviceInfo.GetAuthorizationUrl(Request.Url));
}

// Connect to Exchange
var service = ConnectToServiceWithImpersonation(serviceInfo.AccessToken);

Folder inbox = Folder.Bind(service, WellKnownFolderName.Inbox);

在 Folder.Bind 调用中,我收到 401 Unauthorized 错误。 EWS Trace 给我这个:

2014-04-06 12:06:39.2012 TRACE ExchangeWebServices: EwsResponseHttpHeaders -> <Trace Tag="EwsResponseHttpHeaders" Tid="11" Time="2014-04-06 10:06:39Z">
HTTP/1.1 401 Unauthorized
request-id: 01ba1ca9-2850-480a-9d65-ec55bfef8657
X-CasErrorCode: BadSamlToken
X-FEServer: AMSPR04CA018
Content-Length: 0
Cache-Control: private
Date: Sun, 06 Apr 2014 10:06:39 GMT
Server: Microsoft-IIS/7.5
WWW-Authenticate: Basic Realm=""
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET

不幸的是,谷歌搜索了几个小时并没有真正帮助,似乎没有太多关于 EWS 和 OAuth 身份验证的具体信息,我不知道如何进一步解决它,所以我希望有人能提供一些建议关于如何让它工作。

最佳答案

TokenCredentials 不是在此示例中使用的正确类。就像杰森提到的那样,出于其他原因而实现。请注意并澄清使用此和/或 SAML token 将无法在带有 EWS 的 Exchange Online 中使用。仅支持基于 OAuth 的访问。为了完成这项工作,我们在 EWS 托管 API 中放置了一个 OAuthCredentials 类。在您的代码中,您可以“var credentials = new OAuthCredentials(token)”。请注意,EWS Soap 仅支持完整的“user_impersonation”/“对用户邮箱的完全访问”权限。 Calendar.Read 等粒度权限仅适用于 EWS Rest API。虽然“完全邮箱访问”需要管理员同意,但其他租户的管理员可以同意,因为它是一个网络应用程序。如果您想开发一个本地应用程序,该应用程序必须直接在其运行的租户应用程序中注册才能使用“完全邮箱访问权限”。

关于c# - 使用 OAuth 的 Office 365/EWS 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22892650/

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