我正在编写一个简单的.NET Web应用程序,以使用EWS查看Exchange Online(Office 365)云站点上的一些房间日历。我知道如何在我的代码中创建Exchange服务,将凭据设置为新的WebCredentials
(具有有效的用户名/密码),并自动发现服务URL。
我的问题是:安全发送的用户名/密码对,还是明文?
如果这不安全,如果我明确将服务的URL设置为https://outlook.office365.com/EWS/Exchange.asmx URI怎么样?
答案 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证书就不容易拦截密码。