如何删除Windows Hello中非管理员账户的FIDO2密钥?
解决Windows 10非管理员账户下删除FIDO2密钥的思路
问题场景
在Windows 10 Enterprise 22H2的非管理员账户下,通过Windows Hello创建了约40个FIDO2密钥,需要批量删除。现有方案存在权限矛盾:
- 提升权限的PowerShell无法访问用户专属的密钥归档文件,看不到目标密钥;
- 非管理员账户的普通PowerShell能看到密钥,但无删除权限;
- 第三方工具(webauthn-fido2-key-remover)同样受限于权限问题无法生效。
注意:Windows 11 22H2专属的FIDO2密钥管理API不适用于当前Win10环境。
可行解决思路
1. 以用户上下文启动提升权限会话批量删除
通过runas命令,以当前非管理员用户身份启动带管理员权限的PowerShell,既保留用户上下文可读取密钥,又具备删除权限:
runas /user:%username% "powershell -Command ""certutil -csp NGC -key | ForEach-Object { if ($_ -match '^[a-fA-F0-9]+$') { certutil -csp NGC -delkey $_ } }"""
执行时需输入当前用户密码,若用户无管理员权限,需先临时将其加入本地管理员组:
- 管理员账户下执行:
net localgroup administrators <你的用户名> /add - 删除完成后移除权限:
net localgroup administrators <你的用户名> /delete
2. 直接操作NGC密钥存储目录
FIDO2密钥(NGC容器)存储于%LOCALAPPDATA%\Microsoft\NGC,步骤如下:
- 关闭所有占用NGC文件的进程(Windows Hello服务、浏览器等);
- 管理员权限打开文件资源管理器,导航至上述目录;
- 给该目录添加当前非管理员用户的完全控制权限;
- 切换回非管理员账户,删除目录内所有文件(注意:此操作会清除该用户所有Windows Hello相关设置,包括PIN、生物识别数据,操作前请备份)。
3. 用PowerShell模拟用户上下文执行提升操作
通过Start-Process结合用户凭据,启动带管理员权限的进程并加载用户配置:
$cred = Get-Credential -UserName $env:USERNAME -Message "Enter your password" Start-Process powershell -Credential $cred -ArgumentList "-NoExit", "-Command", "certutil -csp NGC -key | ForEach-Object { if (`$_ -match '^[a-fA-F0-9]+$') { certutil -csp NGC -delkey `$_ } }" -Verb RunAs
此方法同样需要用户临时拥有管理员权限以执行提升操作。
4. 调整本地组权限赋予密钥删除权限
将用户加入Cryptographic Operators组,获得加密密钥管理权限:
- 管理员账户打开
计算机管理,导航至本地用户和组->组->Cryptographic Operators; - 添加当前非管理员用户至该组;
- 注销重新登录后,尝试在普通PowerShell中执行删除命令。
内容的提问来源于stack exchange,提问作者erionpc
相关产品推荐
相关产品推荐

