在我的公司中,我们有一个SharePoint服务器和一个Active Directory域。如果我想从SharePoint服务器获取任何信息,我必须发送一些这样的凭据:
var request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "GET";
request.Credentials = CredentialCache.DefaultNetworkCredentials; // <-- credentials
var response = request.GetResponse();
这很好用,没问题,因为我信任 SharePoint服务器。
但是我想知道:将DefaultNetworkCredentials
发送到不受信任的服务器是否存在安全问题?不受信任的服务器是否可以使用这些凭据来冒充我/用户?它可以从这些凭证中提取我的密码吗?
我猜/希望这些凭据不包含(纯文本)Windows密码。但是,DefaultNetworkCredentials
状态为MSDN documentation:
DefaultNetworkCredentials返回的凭据表示运行应用程序的当前安全上下文的身份验证凭据。对于客户端应用程序,这些应用程序通常运行应用程序的用户的Windows凭据(用户名,密码和域)。
还有这句话(在同一个MSDN文档中):
DefaultNetworkCredentials属性返回的凭据适用于仅适用于NTLM,协商和基于Kerberos的身份验证。
我猜这意味着DefaultNetworkCredentials
可以安全使用 - 但我希望对此有一些确认;因为我不知道&#34; NTLM,协商和基于Kerberos的身份验证&#34;真的意味着 - 除了他们(可能)某种认证机制。
答案 0 :(得分:1)
Kerberos auth是在此方案中使用的最安全的身份验证方法。 NTLM不太安全,Negotiate允许客户端和服务器使用Kerberos,如果它们都支持Kerberos - 如果不支持它们回退到NTLM。但是,密码形式的明文凭证不会通过网络发送。使用Internet Explorer访问SharePoint站点时使用相同的机制,Internet Explorer也不会发送密码,而是使用您的默认网络凭据。 只要您的服务器配置为使用这些提供程序(NTLM,Negotiate,Kerberos)和非基本或表单身份验证的Windows身份验证,就不会出现安全问题。
您可能需要参考https://msdn.microsoft.com/en-us/library/aa480475.aspx?f=255&MSPPError=-2147217396以获取有关IIS身份验证及其方法的详细信息。