这些 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的第一个模块来执行身份验证过程。 该过程的详细信息因涉及的身份验证模块类型而异。身份验证过程完成后,身份验证模块将一个Authorization返回给
WebRequest,其中包含访问 Internet 资源所需的信息。
某些身份验证方案无需先请求资源即可对用户进行身份验证。 应用程序可以通过在访问资源前对用户进行身份验证来节省时间,从而消除了至少一次往返服务器的时间。 或者,它可以在程序启动期间执行身份验证,以便以后对用户做出更响应。 可以使用预身份验证的身份验证方案将 PreAuthenticate 属性设置为 true。