Exchange Online(EWS)Web凭据是否安全传递?

The*_*ude 3 c# security exchange-server credentials

我正在编写一个简单的.NET Web应用程序,以使用EWS在我们的Exchange Online(Office 365)云站点上查看一些房间日历。我知道如何在代码中创建Exchange服务,将凭据设置为新的凭据WebCredentials(使用有效的用户名/密码)以及自动发现服务URL。

我的问题是:用户名/密码对是安全发送的还是明文?

如果这不安全,那么如果我将服务的URL显式设置为https://outlook.office365.com/EWS/Exchange.asmx URI ,该怎么办?

jes*_*ing 5

AutoDiscoverUrl()您可以直接使用设置网址,而无需调用exchangeService.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");

同样,在调用之后,AutoDiscoverUrl()您还可以检查对象的Url属性,ExchangeService以查看它是解析为安全端点还是您信任的端点(例如,从配置文件中的特定列表中解析)。

为了绝对确保返回的网址是安全的,您应该验证返回的证书来自您期望的组织,并且该证书由受信任的机构签名。在此说明过程。本文中提到的默认实现也接受自签名证书,您可能不想在生产代码中这样做。例如,您可以将证书固定到特定的指纹。

如果要排除自签名证书,请在引用的示例中更改以下代码以返回false:

// When processing reaches this line, the only errors in the certificate chain are 
// untrusted root errors for self-signed certificates. These certificates are valid
// for default Exchange server installations, so return true.

// Or when you know that the certificate is signed by a trusted root authority, return false.
return false;
Run Code Online (Sandbox Code Playgroud)

为了回答您的问题,通常使用NTLM或Kerberos安全发送用户名/密码。在最坏的情况下,可以使用基本身份验证来发送它们,但是如果您通过SSL连接,那么只要您正确验证SSL证书就不容易拦截密码。