EAPHost Supplicant 常见问题解答

本主题提供有关 EAPHost Supplicant API 的常见问题的解答。

为什么需要调用“EapHostPeerInitialize”和“EapHostPeerUninitialize”?

EapHostPeerInitializeEapHostPeerUninitialize 初始化和取消初始化用于进程间通信的 COM 环境, (IPC) supplicant 与 EAPHost 之间的通信。

必须在为单线程单元初始化 COM 的线程上调用哪些函数 (STA) ?

必须在为 STA 初始化 COM 的线程上调用 EapHostPeerInvokeConfigUIEapHostPeerInvokeInteractiveUIEapHostAuthenticatorInvokeConfigUI。 这可以通过调用 COM API CoInitialize 来实现;如果请求者已完成 STA 线程 CoUninitialize ,则必须在退出之前调用。

EAPHost 如何导出密钥材料?

EAPHost EAP 方法以 Microsoft 点到点加密 (MPPE) 密钥的形式导出主会话密钥 (MSK) 。 其他键控材料,如双对主密钥 (PMK) 可以使用 MSK 生成。 若要在身份验证期间生成任何其他密钥的方法,方法可以将这些密钥作为供应商特定的属性提供给请求者。

什么是扩展主会话密钥 (EMSK) ?

EMSK 是 EAP 方法导出的其他键键材料。 EMSK 长度至少为 64 个八进制数。 EMSK 在 EAP 客户端和服务器之间共享,但不与验证器或任何其他第三方共享。 目前,EMSK 保留供将来使用。 有关详细信息,请参阅 适用于无线 LAN 的可扩展身份验证协议 EAP) 方法要求

方法何时使用或生成属性?

如果 EAP 方法生成属性或 EMSK,则请求方将使用属性。 通常,请求方使用的属性是键。 消耗的属性是 eatPeerId、eatServerIdeatMethodIdeatEMSKeatCredentialsChanged 有关详细信息,请参阅 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 是一个指针,指向用于标识属于请求方的网络连接的 supplicant 定义的 GUID 值。 调用 NotificationHandler 回调函数时,会传递此 GUID,以标识请求请求将用于重新身份验证请求的网络连接。

如何实现知道隔离状态是否有变化?

仅当系统中至少有一个网络访问保护 (NAP) 隔离强制客户端 (QEC) 注册接口时,用户才会收到隔离状态更改的视觉通知。 如果是这样,尝试重新身份验证时,系统会通过弹出窗口通知用户隔离状态更改。

如何实现知道系统中是否有 NAP QEC 注册接口?

打开提升的窗口,并运行以下 netsh 命令:“netsh nap 客户端显示状态”。 有关详细信息,请参阅 Netsh 命令

如果请求者重新进行身份验证,QEC 应在重新身份验证期间使用什么连接 ID?

QEC 应使用相同的连接 ID,该 ID 用于上一个会话。

只有一个 EAPHost 请求方法可用于显示用户界面 (UI) 对话框,但 EAP 方法具有多种特定于 UI 的调用类型。 当请求者获取“EapHostPeerResponseInvokeUI”操作代码时,请求方应调用什么方法,指示请求者必须显示 UI 对话框?

用户不需要执行任何操作,因为 EAPHost 知道要调用的方法函数。 例如,当返回操作代码 EapHostPeerResponseInvokeUI 时,请求方按以下顺序调用这三个函数: EapHostPeerGetUIContextEapHostPeerInvokeInteractiveUIEapHostPeerSetUIContext

凭据 BLOB 和配置 BLOB 之间有什么区别?

凭据 BLOB 仅包含用户名、密码和 PIN 等用户数据。 配置 BLOB 包含控制方法行为的设置。

是否可以在 EAPHost 客户端上启用跟踪?

是的。 有关详细信息,请参阅 “启用跟踪”。