Exchange Online(EWS)WebCredentials是否安全通过?

时间:2014-01-07 21:57:09

标签: c# security exchange-server credentials

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

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

如果这不安全,如果我明确将服务的URL设置为https://outlook.office365.com/EWS/Exchange.asmx URI怎么样?

1 个答案:

答案 0 :(得分:4)

您可以set the url directly using AutoDiscoverUrl()

,而不是致电exchangeService.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");

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

要确保返回的Url是安全可靠的,您应该验证返回的证书是否来自您期望的组织,以及证书是否由受信任的机构签名。这process is explained here。他在文章中提到的默认实现也接受自签名证书,您可能不希望在生产代码中执行此操作。例如,您可以将证书固定到特定指纹。

如果要排除自签名证书,请在引用的示例中更改以下代码以返回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;

要回答您的问题,通常使用NTLM或Kerberos安全地发送用户名/密码。在最糟糕的情况下they can be sent using basic authentication,但如果您通过SSL连接,只要您正确验证SSL证书就不容易拦截密码。