本主题提供有关 EAPHost 请求 API 的常见问题的解答。
为什么需要调用“EapHostPeerInitialize”和“EapHostPeerUninitialize”?
EapHostPeerInitialize 和 EapHostPeerUninitialize 初始化和取消初始化用于请求方与 EAPHost 之间的进程间通信的 COM 环境, (IPC) 。
必须在为单线程单元 (STA) 初始化 COM 的线程上调用哪些函数?
必须在已为 STA 初始化 COM 的线程上调用 EapHostPeerInvokeConfigUI、EapHostPeerInvokeInteractiveUI 和 EapHostAuthenticatorInvokeConfigUI。 这可以通过调用 COM API CoInitialize 来实现;如果请求者已完成 STA 线程 CoUninitialize ,则必须在退出之前调用 。
EAPHost 如何导出密钥材料?
EAPHost EAP 方法以 Microsoft 点对点加密 (MPPE) 密钥的形式将主会话密钥 (MS) K 导出到请求者。 其他密钥材料,如成对主密钥 (PMK) 可由请求方使用 MSK 生成。 对于在身份验证期间生成任何其他密钥的方法,方法可以将这些密钥作为供应商特定的属性提供给请求者。
什么是扩展主会话密钥 (EMSK) ?
EMSK 是由 EAP 方法导出的其他密钥材料。 EMSK 长度至少为 64 个八位字节。 EMSK 在 EAP 客户端和服务器之间共享,但不与验证器或任何其他第三方共享。 目前,EMSK 保留供将来使用。 有关详细信息,请参阅 无线 LAN 的可扩展身份验证协议 EAP) 方法要求。
方法何时使用或生成属性?
如果 EAP 方法生成属性或 EMSK,则请求方将使用属性。 通常,请求者使用的属性是键。 消耗的属性包括 eatPeerId、 eatServerId、 eatMethodId、 eatEMSK 和 eatCredentialsChanged。 有关详细信息,请参阅 EAP_ATTRIBUTE_TYPE。 EAP 方法可以导出其他特定于应用程序的 EMSK 材料,例如:
- 会话 ID
- [网络访问保护] (/windows/desktop/NAP/network-access-protection-start-page) (NAP)
802.1X 使用哪些属性?
本机无线 802.1X 请求方将使用以下 EAPHost 身份验证属性:
- 更改密码通知
- Microsoft 点对点加密 (MPPE) 发送/接收密钥。 VendorId/VendorType = 331/16 和 311/1
MPPE 密钥是由对等方和验证器在身份验证成功结束时生成的密钥。
802.1X 使用这些密钥,网络访问服务器 (NAS) 来加密和解密发送和接收的数据包。
EAPHost 中EAP_PEER_FLAG_GUEST_ACCESS标志的用途是什么?
在 EAPHostPeerBeginSession 中设置此标志时,EAPHost 会将此标志解释为来宾授权请求,并返回一个 NULL 标识响应,该响应随后传递给请求方并返回到 EAP 服务器。
请求者如何请求计算机身份验证?
通过设置 EAP_FLAG_MACHINE_AUTH 标志请求计算机身份验证。
请求者如何请求用户身份验证?
通过不设置 EAP_FLAG_MACHINE_AUTH 标志来请求用户身份验证。
何时使用“EapHostPeerFreeErrorMemory”而不是“EapHostFreeEapError”函数?
EapHostPeerFreeErrorMemory 函数仅用于释放 EAPHost 配置 API 返回的EAP_ERROR结构。 EAPHost 配置 API 在 EapHostPeerConfigApis.h 中定义。 相比之下, EapHostPeerFreeEapError 函数用于释放 EAPHost 运行时 API 返回 的EAP_ERROR 结构。 EAPHost 运行时 API 在 EapPApis.h 中定义。 切勿将 API 的运行时版本与 API 的配置版本一起使用;这样做可能会产生意外的结果。
我在用于处理请求方 EAP 身份验证会话的同一线程中实现了 UI。 在引发交互式用户界面对话框以获取凭据或其他用户输入数据后,EAPHost 对 EAP 对等方法的下一次调用将失败,并出现“ERROR_OBJECT_DISCONNECTED”。 为什么会发生这种情况,以及如何解决它?
虽然 EAPHost 客户端 API 都是 C 样式 API,但这些 C API 只是相应 COM API 的包装器。 C 样式 API 在多线程 COM 环境中运行。 UI 代码通常在单元线程模型中运行。 由于这两个线程模型相互冲突,因此请不要在处理 EAP 身份验证的同一线程中运行 UI 代码。
为什么“EapHostPeerBeginSession”API 将“NotificationHandler”回调函数指针作为参数?
NotificationHandler 是通知请求者必须重新进行身份验证的机制。 在各种情况下,请求者需要重新进行身份验证,包括使用 网络访问保护 (NAP) 进行身份验证。
“EapHostPeerBeginSession”API 中“pConnectionId”参数的用途是什么?
pConnectionId 是指向请求者定义的 GUID 值的指针,用于标识属于该请求的网络连接。 调用 NotificationHandler 回调函数时,传递此 GUID 以标识请求方将用于重新身份验证请求的网络连接。
如何实现知道隔离状态是否有变化?
仅当系统中至少有一个网络访问保护 (NAP) 隔离强制客户端 (QEC) 注册接口时,用户才会收到隔离状态更改的可视通知。 如果是这样,在尝试重新身份验证时,将通过弹出窗口通知用户隔离状态更改。
如何实现知道系统中是否有 NAP QEC 注册的接口?
打开提升的窗口,并运行以下 netsh 命令:“netsh nap client show state”。 有关详细信息,请参阅 Netsh 命令。
如果请求方重新进行身份验证,QEC 应在重新身份验证期间使用哪个连接 ID?
QEC 应使用与上一个会话相同的连接 ID。
只有一个 EAPHost 请求方法可用于显示用户界面 (UI) 对话框,但 EAP 方法具有多种类型的特定于 UI 的调用。 请求方在获取“EapHostPeerResponseInvokeUI”操作代码(指示请求者必须显示 UI 对话框)时应调用哪种方法?
用户不需要执行任何操作,因为 EAPHost 知道要调用哪个方法函数。 例如,当返回操作代码 EapHostPeerResponseInvokeUI 时,请求方按以下顺序调用这三个函数: EapHostPeerGetUIContext、 EapHostPeerInvokeInteractiveUI 和 EapHostPeerSetUIContext。
凭据 BLOB 和配置 BLOB 之间有何区别?
凭据 BLOB 仅包含用户名、密码和 PIN 等用户数据。 配置 BLOB 包含控制方法行为的设置。
是否可以在 EAPHost 客户端启用跟踪?
是的。 有关详细信息,请参阅 启用跟踪。