这些 System.Net 类支持各种客户端身份验证机制,包括标准 Internet 身份验证方法基本、摘要、协商、NTLM 和 Kerberos 身份验证,以及可以创建的自定义方法。
身份验证凭据存储在NetworkCredential和CredentialCache类中,这些类实现了ICredentials接口。 当其中一个类查询凭据时,它将返回 NetworkCredential 类的实例。 身份验证过程由 AuthenticationManager 类管理,实际身份验证过程由实现接口的 IAuthenticationModule 身份验证模块类执行。 必须先向 AuthenticationManager 注册自定义身份验证模块,然后才能使用它;默认情况下,会注册基本、摘要、协商、NTLM 和 Kerberos 身份验证方法的模块。
NetworkCredential 存储与 URI 标识的单个 Internet 资源关联的一组凭据,并返回它们以响应对该方法的任何调用 GetCredential 。 NetworkCredential 类通常由访问有限数量的 Internet 资源的应用程序或在所有情况下使用相同的凭据集的应用程序使用。
CredentialCache 类存储各种 Web 资源的凭据集合。 GetCredential调用该方法时,CredentialCache 将返回正确的凭据集,由 Web 资源的 URI 和请求的身份验证方案确定。 使用具有不同身份验证方案的各种 Internet 资源的应用程序受益于使用 CredentialCache 类,因为它存储所有凭据,并按请求提供它们。
当 Internet 资源请求身份验证时,WebRequest.GetResponse 方法会将 WebRequest 发送给 AuthenticationManager,连同请求凭据的需求。 然后,根据以下过程对请求进行身份验证:
AuthenticationManager 按照注册的每个身份验证模块的顺序调用Authenticate该方法。 AuthenticationManager 使用不返回 null 的第一个模块来执行身份验证过程。 该过程的详细信息因涉及的身份验证模块类型而异。
身份验证过程完成后,身份验证模块将返回一个 AuthorizationWebRequest ,其中包含访问 Internet 资源所需的信息。
某些身份验证方案无需先请求资源即可对用户进行身份验证。 应用程序可以通过在访问资源前对用户进行身份验证来节省时间,从而消除了至少一次往返服务器的时间。 或者,它可以在程序启动期间执行身份验证,以便以后对用户做出更响应。 可以使用预身份验证的身份验证方案将 PreAuthenticate 属性设置为 true。