代码之家  ›  专栏  ›  技术社区  ›  Marcus

System.net.CredentialCache.DefaultCredentials中的密码是如何加密的?

  •  1
  • Marcus  · 技术社区  · 16 年前

    如果我使用system.net.credentialcache.defaultcredentials将当前用户的凭据传递给Web服务,那么信息将以何种方式传递? 我不认为它是明文,所以凭证必须加密,但是它们是如何加密的呢?

    1 回复  |  直到 16 年前
        1
  •  1
  •   Matt Brindley    16 年前

    这取决于head响应中的服务器请求。

    例如,如果我对您的Web服务执行头请求,并且其响应中的一个HTTP头是“www-authenticate:ntlm”,那么将使用ntlm对存储在defaultcredentials中的凭据进行加密,然后使用完整的get/post/put/whatever发送。要确保发生这种情况,您需要确保您的Web服务器配置为请求NTLM身份验证。在IIS中,这是选择“集成Windows身份验证”的情况。我对Tomcat不太确定,但是 this post 看起来很中肯。

    但是,如果您的Web服务器对特定资源使用“www-authenticate:basic”进行回复(这将涉及以明文形式发送凭证,并对其进行编码(注意: 加密)作为base64),您将得到一个argumentexception,因为它被认为是通过基本身份验证发送帐户凭据的安全异常。

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

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

    编辑

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

    他们的凭证将作为一个大的加密混乱到达服务器,对于除了Web服务器以外的任何人,他们都将对其进行解密,以查看他们是否包含当前登录用户的用户名、密码和域。

    根据请求的应用程序类型,将发送凭据defaultcredentials。如果是在用户帐户下运行的客户端应用程序,则凭据为该用户的凭据。如果是正在与Web服务通信的ASP.NET应用程序,则默认情况下,它将使用应用程序池运行所使用的帐户的凭据。 NETWORK_SERVICE .