自定义凭据提供程序中调用Windows WebAuthn API的问题
原始问题
我制作了一个简单的控制台应用程序,调用Windows WebAuthn API的WebAuthNAuthenticatorGetAssertion(),该API会弹出CredentialUIBroker.exe窗口,用于通过外部FIDO2安全密钥完成身份验证。
我尝试将该应用集成到自定义凭据提供程序中,通过子进程执行,但登录页面并未显示预期的UI。查看系统事件日志后发现身份验证失败,错误代码为:
Error: 0x8000401A. The server process could not be started because the configured identity is incorrect. Check the username and password
这一情况很奇怪,因为在正常登录会话中使用相同的凭据ID和安全密钥时,该程序可以成功运行。
有讨论指出,凭据提供程序中无法使用Windows WebAuthn API,必须使用第三方FIDO客户端(如libfido2);但也有观点认为这只是UI线程问题,应该可以像samplehardwareeventcredentialprovider示例那样创建窗口来显示Broker。
我尝试在其他线程以及CommandLinkClicked回调中调用WebAuthNAuthenticatorGetAssertion(),但两次尝试均以失败告终。
想问:凭据提供程序中只能使用第三方FIDO客户端吗?无法使用Windows WebAuthn API确实很遗憾,因为它提供了操作FIDO兼容设备的简便方式。
编辑1:解决方案调整
最终我改用了libfido2。需要注意:Windows限制普通用户从HID接口访问FIDO2安全令牌,如果使用默认的USE_HIDAPI配置通过libfido2访问FIDO2安全密钥,需要具备管理员权限。
由于凭据提供程序将在系统上下文下运行,这不会(部分)成为问题。
编辑2:补充说明
正如@Nehluxhes所述,在CREDUI模式下的凭据提供程序中使用libfido2确实会存在问题。
内容的提问来源于stack exchange,提问作者stevenchucp

