身份验证协议初始化

EAP 安全连接在客户端和服务器之间以类似的方式初始化 RAS 和无线 (802.1X) 客户端。

客户

客户端尝试建立连接时,身份验证服务会获取用户 标识信息。 如果此身份验证协议的注册表中存在 RAS_EAP_VALUENAME_INVOKE_NAMEDLG 值,并且此值设置为零,身份验证服务将调用 RasEapGetIdentity。 此函数通常显示一个用户界面,该用户界面允许标识信息是特定于身份验证协议的类型;例如,证书或数字 ID。 如果 RAS_EAP_VALUENAME_INVOKE_NAMEDLG 不存在或设置为 1,身份验证服务将显示标准系统用户名对话框。

身份验证服务获取用户的标识信息后,它会调用身份验证协议实现 RasEapBegin。 此调用允许身份验证协议分配和初始化服务将后续调用传递给 RasEapMakeMessage 的工作缓冲区,并 RasEapEnd。 工作缓冲区对服务不透明,并且永远不会访问工作缓冲区的内容。 如果身份验证协议为每个 EAP 会话创建不同的工作缓冲区,则工作缓冲区是会话和线程安全的。 由于身份验证协议为工作缓冲区分配内存,因此身份验证协议还应使用 RasEapFreeMemory 函数释放此内存。

在调用 RasEapBegin时,服务还会传递一个 PPP_EAP_INPUT 结构,该结构包含指向连接配置信息的指针,以及用户的标识信息。 该服务始终传入 pszIdentityPPP_EAP_INPUT成员的值。 但是,PPP_EAP_INPUTpszPassword 成员可能 NULL

PPP_EAP_INPUT 结构中,fAuthenticator 成员指示正在调用身份验证协议以(在客户端上)或作为验证器(在服务器上)进行身份验证。

服务器

在服务器上,PPP_EAP_INPUTbInitialID 成员指定服务器用于第一个 EAP 数据包的 ID。 服务器为后续数据包递增此 ID。

此外,在服务器上,pUserAttributes 指针 PPP_EAP_INPUT 指向 RAS_AUTH_ATTRIBUTE_TYPE 类型的属性数组。 这些是从客户端获取的用户的属性。

如果 RasEapBegin 调用返回除 NO_ERROR以外的任何值,会话将断开连接。 返回的错误记录(在服务器上),或显示给用户(在客户端上)。