正在获取标识信息
实现身份验证协议的供应商还可以提供一个函数接口,用于获取请求身份验证的用户的初始标识信息。
供应商应实现以下函数。
这些函数可以在与身份验证协议相同的 DLL 或单独的 DLL 中实现。 此外,实现标识函数的 DLL 可支持多个身份验证协议。 这些函数的 DLL 路径存储在身份验证协议的密钥下的 RAS_EAP_VALUENAME_IDENTITY 注册表值中。 有关创建此注册表值的详细信息,请参阅 EAP 安装。
RasEapGetIdentity 函数通常会显示用户界面 (UI),以获取用户的标识信息。 但是,如果 dwFlags 参数包含 RAS_EAP_FLAG_NON_INTERACTIVE 标志,则 RasEapGetIdentity 应不显示 UI。
如果 RasEapGetIdentity 确实显示了 UI,则 UI 必须支持 WM_COMMAND 消息,其中 LOWORD (wParam) 的值等于 IDCANCEL。
如果此 EAP 的注册表中的 RAS_EAP_VALUENAME_INVOKE_NAMEDLG 值设为零,则身份验证服务将调用 RasEapGetIdentity。 如果 RAS_EAP_VALUENAME_INVOKE_NAMEDLG 不存在,或存在且设为 1,则身份验证服务将显示标准系统用户名对话框。
除了 RAS_EAP_VALUENAME_INVOKE_NAMEDLG,EAP 供应商还可以在注册表中创建一个相关值 RAS_EAP_VALUENAME_INVOKE_PWDDLG。 如果此值存在且设为零,则服务将不会显示标准系统密码对话框。 当实现生物识别方法(如指纹扫描)对用户进行身份验证时,此值很有用。 如果 RAS_EAP_VALUENAME_INVOKE_NAMEDLG 和 RAS_EAP_VALUENAME_INVOKE_PWDDLG 值均为零,则标识 UI 可用于获取标识和生物识别信息。 但是,如果只有 RAS_EAP_VALUENAME_INVOKE_PWDDLG 为零,则身份验证服务将不会调用 RasEapGetIdentity。 在这种情况下,可以使用交互式用户界面来获取生物识别信息。
有关这些注册表值的详细信息,请参阅身份验证协议注册表值。
RasEapGetIdentity 获取的信息在调用 RasEapBegin 期间传递给身份验证协议。 该信息由 PPP_EAP_INPUT 结构的 pszIdentity 和 pUserData 成员指向。 若要将此信息保存在客户端计算机上的注册表中,身份验证协议应在 RasEapMakeMessage 的 pEapOutput 参数中返回该信息。
调用 RasEapBegin 后,身份验证服务会调用 RasEapFreeMemory 以释放此数据占用的内存。 因此,身份验证协议应在调用 RasEapBegin 期间将信息复制到专用内存缓冲区中。