身份验证协议初始化
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 结构,该结构包含指向连接的配置信息的指针,以及用户的标识信息。 服务始终为 PPP_EAP_INPUT 的 pszIdentity 成员传递值。 但是,PPP_EAP_INPUT的 pszPassword 成员可能为 NULL。
在 PPP_EAP_INPUT 结构中, fAuthenticator 成员指示是调用身份验证协议以在客户端) 上 (进行身份验证,还是作为服务器) 上的验证器 (。
服务器
在服务器上,PPP_EAP_INPUT 的 bInitialID 成员指定服务器用于第一个 EAP 数据包的 ID。 服务器为后续数据包递增此 ID。
此外,在服务器上,PPP_EAP_INPUT 中的 pUserAttributes 指针指向RAS_AUTH_ATTRIBUTE_TYPE类型的属性数组。 这些是从客户端获取的用户的属性。
如果 RasEapBegin 调用返回 除 NO_ERROR 以外的任何值,则会话将断开连接。 返回的错误记录在服务器) (,或显示给客户端) 上的用户 (。