1

如果我使用 system.net.credentialcache.defaultcredentials 将当前用户凭据传递给 Web 服务,信息将以哪种方式传输?我认为它不会是明文,因此必须对凭据进行加密,但是它们如何呢?

4

1 回答 1

1

这取决于服务器在 HEAD 响应中请求的内容。

例如,如果我对您的 Web 服务执行 HEAD 请求,并且其响应中的 http 标头之一是“WWW-Authenticate: NTLM”,则存储在 DefaultCredentials 中的凭据将使用 NTLM 加密,然后与完整的 GET 一起发送/POST/PUT/随便。为确保发生这种情况,您需要确保将 Web 服务器配置为请求 NTLM 身份验证。在 IIS 中,这是选择“集成 windows 身份验证”的情况。我不确定 TomCat,但这篇文章看起来很中肯。

但是,如果您的 Web 服务器对特定资源回复“WWW-Authenticate: Basic”(这将涉及以明文发送凭据,编码(注意:加密)为 base64),您将收到一个 ArgumentException,因为它被认为是通过基本身份验证发送您的帐户凭据的安全例外。

Web 服务器也可以配置为接受多种身份验证方法,但您应该始终准备好接受其中最弱的一种,因此提供基本身份验证作为“后备”意味着您的一些用户很可能会发送他们的凭据明文。

浏览器通常会选择可用的最强方法,我怀疑(但不确定).net 库的行为方式相同。

编辑

只要您的 Web 服务器为您的 Web 服务请求 NTLM,您就可以确定任何明智的客户端都不会以明文形式发送凭据。使用 .net 框架中的网络类,您可以确保如果您使用 DefaultCredentials,并且不自己手动注入基本身份验证标头,您的凭据将使用 NTLM 加密发送。

他们的凭据将作为一个大的加密混乱到达服务器,除了网络服务器之外的任何人,谁将解密它们以查看它们包括当前登录用户的用户名、密码和域。

DefaultCredentials 将发送的凭据取决于请求 DefaultCredentails 的应用程序类型。如果它是在用户帐户下运行的客户端应用程序,则凭据将是该用户的。如果它是与您的 Web 服务通信的 ASP.NET 应用程序,它将使用运行应用程序池的帐户的凭据,默认情况下,这是NETWORK_SERVICE.

于 2009-06-02T10:13:07.323 回答