
后端前端运维MCP 服务【免费下载链接】nginx-uiYet another WebUI for Nginx项目地址https://gitcode.com/gh_mirrors/ngi/nginx-ui点击查看免费下载导读Webauthn 是基于公钥加密的 Web 认证标准允许用户使用指纹、面部识别、设备 PIN 或 FIDO 安全密钥完成无密码登录。自v2.0.0-beta.34起Nginx UI 已将 Webauthn passkey 同时作为登录方式和二次认证2FA手段集成到系统中。本篇指南以官方文档 config-webauthn.md 为骨架结合仓库内配置解析、认证中间件与前后端实现源码完整讲解 passkey 在 Nginx UI 中的工作原理、app.ini配置步骤、浏览器安全限制以及会话内的 2FA 行为细节帮助你安全、正确地启用并管理 passkey。Passkey 是什么Passkey 是 Webauthn 凭据的一种具体形态它通过触碰、面部识别、设备密码或 PIN 来验证你的身份。与传统的用户名 密码不同passkey 的私钥保存在你的设备安全芯片如手机、电脑或 FIDO 安全密钥中服务器端只保存对应的公钥因此即使服务端数据库泄露攻击者也无法伪造你的凭据。在 Nginx UI 中passkey 承担两种角色密码替代品完全无密码登录替代用户名/密码输入二次认证2FA在密码登录等场景下作为第二重身份校验手段。配置 Webauthn出于安全考虑Webauthn 配置不能通过 UI 添加必须手动编辑app.ini配置文件然后重启 Nginx UI 使配置生效。三个核心配置项配置位于app.ini的[webauthn]段由 settings/webauthn.go 定义[webauthn] RPDisplayName Nginx UI RPID localhost RPOrigins http://localhost:3002,http://127.0.0.1:3002配置项类型说明RPDisplayNamestring注册新凭据时显示给用户的依赖方Relying PartyRP显示名称即这台服务是谁的人类可读名称。RPIDstring依赖方 ID即服务的有效域名如example.com是 Webauthn 凭据归属的核心标识。RPOrigins[]string依赖方允许的源Origin列表即允许哪些地址发起 Webauthn 注册/认证请求多个值用逗号分隔。这三个配置项与 Go 代码中的结构体字段一一对应type WebAuthn struct { RPDisplayName string json:rp_display_name RPID string json:rpid RPOrigins []string json:rp_origins }[webauthn]段通过 settings/settings.go 的sections.Set(webauthn, WebAuthnSettings)注册进配置系统与app.ini解析、环境变量覆盖流程完全打通。环境变量覆盖与 Nginx UI 其他配置一致Webauthn 三个配置项也支持通过环境变量覆盖前缀NGINX_UI_详见 env.md配置项环境变量RPDisplayNameNGINX_UI_WEBAUTHN_RP_DISPLAY_NAMERPIDNGINX_UI_WEBAUTHN_RPIDRPOriginsNGINX_UI_WEBAUTHN_RP_ORIGINS在 settings/settings_test.go 中可看到对应的解析测试验证了NGINX_UI_WEBAUTHN_RP_DISPLAY_NAMEWebAuthn、NGINX_UI_WEBAUTHN_RPIDlocalhost、NGINX_UI_WEBAUTHN_RP_ORIGINShttp://localhost:3002被正确映射到WebAuthnSettings。配置生效条件从源码结构看Nginx UI 通过 internal/passkey/webauthn.go 中的Enabled()判断 Webauthn 是否可用func Enabled() bool { options : settings.WebAuthnSettings if options.RPDisplayName || options.RPID || len(options.RPOrigins) 0 { return false } return true }即RPDisplayName、RPID任一为空或RPOrigins为空列表时Webauthn 功能视为未启用。只有在三项配置齐全后系统才会在启动时调用webauthn.New()初始化底层 WebAuthn 实例Init()函数并以RequireResidentKey: true、UserVerification: required强制要求可发现凭据resident key / discoverable credential与用户验证这是实现免输入用户名直接登录的前提。配置后的操作步骤编辑app.ini写入上述[webauthn]段重启 Nginx UI刷新页面进入Settings Authentication再次点击Add Passkey添加 passkey——此时配置已生效注册流程可正常完成。浏览器安全限制由于部分浏览器的安全策略非 HTTPS 网站无法使用 passkey唯一的例外是运行在localhost上。因此生产环境请务必为 Nginx UI 配置 HTTPS 反向代理本地开发/测试可在localhost或127.0.0.1下进行。行为细节Detail启用 passkey 后会话内的 2FA 行为遵循以下三条规则均由 api/user/passkey.go 与 internal/middleware/secure_session.go 等源码协同实现Passkey 自动作为 2FA当你使用 passkey 登录后当前会话中所有需要 2FA 的操作都会自动使用该 passkey无需在 2FA 弹窗中手动点击Authenticate with a passkey。删除 passkey 后的行为如果你通过 passkey 登录随后在 Settings Authentication 中删除当前使用的 passkey则该会话后续的 2FA 挑战不再使用它——若已配置 TOTP基于时间的一次性密码将改用 TOTP若未配置 TOTP则不会触发 2FA。新增 passkey 的优先级如果你未使用 passkey 登录但在 Settings Authentication 中新增了一个 passkey则该新 passkey 会在当前会话的后续所有 2FA 操作中被优先使用。从源码看passkey 的注册BeginPasskeyRegistration/FinishPasskeyRegistration、登录BeginPasskeyLogin/FinishPasskeyLogin以及预认证beginPasskeyPreAuthentication/FinishPasskeyPreAuthentication均围绕30秒超时的会话缓存passkeyTimeout展开登录/注册成功后还会更新model.Passkey记录的LastUsedAt时间戳。模型定义见 model/passkey.go其中Credential字段以 JSON 序列化存储 WebAuthn 凭据RawID用于与浏览器返回的凭据 ID 精确匹配。另外internal/middleware/middleware.go 将/api/begin_passkey_register、/api/finish_passkey_register、/api/passkeys、/api/passkeys/:id以及/api/2fa_secure_session/passkey等接口列入无需强制登录的路径而 internal/middleware/secure_session_test.go 中的测试用例如TestRequireSecureSessionAppliesToPasskeyOnlyUsers、TestRequireSecureSessionFailsClosedWhenPasskeyLookupFails验证了仅配置 passkey 的用户在敏感操作前仍必须完成安全会话校验且 passkey 查询失败时安全会话校验会失败关闭fail-closed这一安全边界。前端配置状态展示前端在 Settings Authentication 页面会读取后端返回的 Webauthn 配置状态。从 AuthSettings.vue 的实现看只有同时满足webauthn.rpid、webauthn.rp_display_name非空且webauthn.rp_origins长度大于 0 时才展示 Webauthn 配置信息卡片并分别展示rpid与rp_display_name的值以及全部rp_origins列表。这与后端Enabled()的判断条件完全一致形成前后端统一的是否已正确配置判定。常见问题排查添加 passkey 时提示未配置/失败检查app.ini是否包含完整的[webauthn]段确认三项配置均非空修改后必须重启 Nginx UI。浏览器提示无法注册 passkey确认当前访问地址是 HTTPSlocalhost/127.0.0.1除外且访问地址与RPOrigins中的 origin 完全匹配协议、域名、端口均需一致。RPID 与访问域名不一致RPID应为用户访问 Nginx UI 所用的有效域名变更域名后需重新注册 passkey。删除了 passkey 但仍想使用 2FA请提前在 Settings Authentication 中配置 TOTP否则删除后该会话不再触发 2FA。小结Webauthn passkey 为 Nginx UI 提供了兼顾安全性与易用性的无密码认证方案通过app.ini的[webauthn]段配置RPDisplayName、RPID与RPOrigins三项参数并重启服务即可启用启用后 passkey 既能作为登录凭据也能在会话内自动承担 2FA 校验且删除/新增 passkey 会实时影响后续 2FA 策略。请务必在 HTTPS或 localhost环境下使用并结合仓库内 internal/passkey/webauthn.go 与 api/user/passkey.go 的源码理解其底层实现以获得安全、可控的无密码登录体验。赞分享后端前端运维MCP 服务【免费下载链接】nginx-uiYet another WebUI for Nginx项目地址https://gitcode.com/gh_mirrors/ngi/nginx-ui点击查看免费下载相关推荐Redwood 自托管认证dbAuth实战指南Cookie 会话机制、完整配置与 WebAuthn 无密码登录Redwood 自托管认证dbAuth实战指南Cookie 会话机制、完整配置与 WebAuthn 无密码登录 本篇技术指南围绕 RedwoodJS 自带后端前端Web框架开发工具Supabase Auth 怎么开启 PasskeyWebAuthn无密码登录并配置 Relying PartySupabase Auth 怎么开启 PasskeyWebAuthn无密码登录并配置 Relying Party 如果你的项目想让最终用户用设备生物识别、后端前端数据库Gel Auth WebAuthn 集成实战指南用 Passkey 为应用实现无密码登录Gel Auth WebAuthn 集成实战指南用 Passkey 为应用实现无密码登录 本篇技术指南以 docs/reference/auth/webaut数据库图数据库关系型数据库创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考