WebAuthn 无密码身份认证

WebAuthn:FIDO/W3C 无密码强身份认证标准 WebAuthn(Web Authentication API)是由 FIDO Alliance 和 W3C 联合制定的一种标准,旨在实现强身份认证、无密码登录。它允许 Web 应用使用硬件安全密钥(如 YubiKey)、生物识别(指纹/人脸)或平台认证器(Windows Hello、Face ID)进行用户认证。 阅读详情

在这里插入图片描述

WebAuthn简介

WebAuthn,全称 Web Authentication,是由 FIDO 联盟(Fast IDentity Online Alliance)和 W3C(World Wide Web Consortium)联合制定的一套新的身份认证标准,旨在为网络身份验证提供一种更强大、更安全的方式,使用户能够使用他们的设备(如手机、USB 密钥或生物识别器)来进行身份验证,而无需使用密码。该项目的目标是标准化用户对基于 Web 的应用程序和服务的公钥认证的接口。

WebAuthn 使用 asymmetric(public-key)cryptography(不对称加密)替代密码或SMS文本在网站上注册,验证,second-factor authentication(双因素验证)解决了phishing(钓鱼),data breaches(数据破坏),SMS 文本攻击,其他双因素验证等重大安全问题,同时显著提高易用性(因为用户不必管理许多越来越复杂的密码)。

WebAuthn 支持的生物验证方式包括:笔记本电脑的指纹识别和面部识别、安卓设备的指纹识别。追求高安全的用户还可额外购买兼容FIDO的实体安全密钥,FIDO完整支持包括:指纹识别、面部识别、虹膜识别、声音识别、实体密钥(USB连接、蓝牙连接、NFC连接),支持设备系统包括:Windows 、Linux、Mac OS、Android、IOS、智能手表等。

注:FIDO 联盟是一个非营利性组织,由 Google、微软、苹果、三星、高通、芯片厂商、支付公司、银行、电信运营商、认证公司等组成,旨在为用户提供更安全、更简单的身份验证体验。

工作原理

WebAuthn 的原理并不复杂,它的核心是基于公钥的加密技术。在 WebAuthn 中,用户的身份认证是通过公钥和私钥来实现的。这很像我们平常使用配置了公私钥的 SSH 登录服务器的过程,只不过 WebAuthn 是在浏览器中实现的。

组成部分

WebAuthn 由以下三个组成部分组成:

  1. 用户代理(User Agent):用户代理是指浏览器或者其他支持 WebAuthn 的客户端,它负责与用户进行交互,收集用户的身份认证信息,并将其发送给服务器。
  2. 身份验证器(Authenticator):身份验证器是指用于生成公钥和私钥的设备,如手机、USB 密钥或生物识别器。Windows Hello 和 macOS 的 Touch ID 也都是常见的身份验证器。
  3. Relying Party:Relying Party 是指需要进行身份认证的网站或应用程序,它负责生成挑战(Challenge)并将其发送给用户代理,然后验证用户代理发送的签名结果。

上述三者在两个不同的用例(注册和认证)中协同工作,如下图所示。图中的各个实体之间的所有通信都由用户代理(通常是Web浏览器)处理。

在这里插入图片描述

架构实现

WebAuthn 用公钥证书代替了密码,完成用户的注册和身份认证(登录)。它更像是现有身份认证的增强或补充。为了保证通信数据安全,一般基于HTTPS(TLS)通信。在这个过程中,有4个模块。

Server(服务端):

它可以被认为一个依赖方(Relying Party),它会存储用户的公钥并负责用户的注册、认证。

JavaScript(Js脚本):

调用浏览器API,与Server进行通信,发起注册或认证过程。

Browser(浏览器):

需要包含WebAuthn的Credential Management API提供给js调用,还需要实现与认证模块进行通信,由浏览器统一封装硬件设备的交互。

Authenticator(认证模块):

它能够创建、存储、检索身份凭证。它一般是个硬件设备(智能卡、USB,NFC等),也可能已经集成到了你的操作系统(比如Windows Hello,MacOS的Touch ID等)。

注册认证

完整注册认证过程:

1)应用请求注册

应用程序发出注册请求,服务端提供api由前端js调用发起注册请求;

2)服务端返回注册数据

服务器将挑战码、用户信息和依赖方信息发送回应用程序。

challenge:挑战码必须是随机的 buffer(至少 16 字节),并且必须在服务器上生成以确保安全。

user info:用户信息,服务端需要知道当前谁来注册,正常应用场景中,第一步需要在其他辅助认证的情况下获取当前合法用户信息,比如第一步传输静态用户名密码来做一次校验,服务器认可当前是一个合法用户请求注册;

relying party info:服务端上下文,包含AuthenticatorAttestationResponse 的 PublicKeyCredential

3)浏览器调用认证器

请求认证器创建认证证书,浏览器生成客户端数据(clientData)生成clientDataHash(由挑战码,服务端上下文 的 SHA-256 哈希)传输给认证器;

4)认证器创建密钥对

认证器通常会以某种形式要求用户确认密钥器的所属,如输入 PIN,使用指纹,进行虹膜扫描等,以证明用户在场并同意注册。验证通过后,认证器将创建一个新的非对称密钥对,并安全地存储私钥以供将来验证使用。公钥则将成为证明的一部分,被在制作过程中烧录于认证器内的私钥进行签名。这个私钥会具有可以被验证的证书链。

5)认证器数据返回浏览器

返回数据包括新的公钥、全局唯一的凭证ID和认证凭证数据(Attestation object l包含FIDO的元数据)会被返回到浏览器。

6)浏览器打包数据,发送到服务端

包含公钥,全局唯一的凭证ID、认证凭证数据、客户端数据(clientData);其中认证凭证数据包含了clientDataHash,可以确定当前生成的公钥是分配给当前请求注册的用户。

7)服务端完成注册

收到客户端发送的注册请求,服务器需要执行一系列检查以确保注册完成且数据未被篡改。步骤包括:

a.检查账号信息,是否是服务端的存在的账号。

b.确保由身份验证程序签名的挑战码与服务器生成的挑战码匹配。

c.使用对应认证器型号的证书链验证 clientDataHash 的签名和验签。

验证步骤的完整列表可以在 WebAuthn 规范中找到。一旦验证成功,服务器将会把新的公钥与用户账户相关联以供将来用户希望使用公钥进行身份验证时使用。

WebAuthn 的注册流程

在这里插入图片描述

在注册时,用户端会生成一对公钥和私钥。其中,私钥存储在本地,而公钥则发送给服务器,服务端会将公钥与用户账户进行关联 。详细的流程如下图所示:

在这里插入图片描述

WebAuthn 的认证流程

在这里插入图片描述

在认证时,用户端会使用私钥对服务器端发送的挑战(Challenge)进行签名,然后将签名结果发送给服务器。服务器端会使用公钥对签名结果进行验证,从而完成身份认证。详细的流程如下图所示:

在这里插入图片描述

你可以在 https://webauthn.me/ 上体验 WebAuthn 的注册和认证过程。

应用场景

Webauthn 提供了一个安全的无密码认证标准,彻底抛弃了密码,并且统一由操作系统完成安全硬件设备和生物特征识别的集成及管理,浏览器调用操作系统进行提供的能力形成认证器,应用开发者按标准与浏览集成即可完成FIDO认证,无需关心硬件设备的兼容和生物特征的算法,使得应用开发者集成FIDO认证抛弃密码更加容易和安全。

场景一:集成Windows Hello认证

Win10系统的Windows hello模块,本身可以集成人脸、指纹、pin码等认证方式,在windows上运行的web应用注册或认证时可以通过浏览器直接与windows hello集成获取用户身份凭证进行认证;

场景二:集成MacOS Touch ID认证

MacBook系统自带Touch ID集成指纹认证,浏览器通过接口可以直接唤醒mac的Touch ID进行认证;支持Webauthn的web应用可以直接使用TouchID进行登录;

场景三:集成Android指纹认证

由于Android系统厂商的异构,不同手机厂商会有不同的人脸识别或指纹识别模块,通过Webauthn由系统层面封装了与生物设备对接,应用系统就无需关心Android系统的异构行,直接使用手机的生物认证登录;

场景四:集成IOS人脸认证

iPhone系统自带Face ID集成人脸认证,浏览器通过接口可以直接唤醒Face ID进行认证;支持Webauthn的web应用可以直接使用Face ID进行登录;

场景五:使用YubiKey认证

YubiKey是一个外置的ukey存储用户私钥来进行webauthn认证,其可以同时支持pc和移动app;pc模式下通过usb接口访问,移动app模式下通过nfc访问;

WebAuthn存在的缺点:

WebAuthn 依赖于浏览器与认证模块通讯,那么必须使用最新的浏览方可支持。在无浏览器情况下如CS应用或移动APP无法简便的使用。

WebAuthn 设计的目标是解决认证,用户一旦通过认证,就可以访问所有资源,在零信任架构中不能允许一次认证永久使用的场景存在。

案例演示

前端案例项目
后端案例项目
线上案例演示

使用SpringBoot+JavaScript集成Windows Hello认证,用户信息分别存入MySQL和Redis。

在这里插入图片描述

数据库信息

在这里插入图片描述

Redis信息

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

WebAuthn无密码身份验证技术 验证器将私钥存在域名+凭证 ID下,再用私钥签名Challenge,将签名结果、凭证 ID和公钥返回给客户端(浏览器)。服务器取出凭证 ID对应的Challenge,用公钥签名Challenge,将结果和浏览器返回的签名比较,一致表面验证通过。然后,把凭证 ID对应的公钥存下来。服务器取出凭证 ID对应的Challenge,用公钥签名Challenge,将结果和浏览器返回的签名比较,一致表面验证通过,允许用户登录。验证器通过域名、凭证 ID找到私钥,通过私钥签名Challenge,将签名结果返回给浏览器。 阅读详情

相关推荐

基于Authentik与YubiKey构建企业级无密码身份认证体系实战指南

在网络安全领域,身份认证是访问控制的第一道防线。传统密码认证因易泄露、易破解等缺陷,已成为主要安全风险点。其原理是通过用户知晓的秘密(密码)进行验证,但面临撞库、钓鱼等威胁。多因素认证(MFA)技术通过结合多种验证要素(如知识、持有物、生物特征)来提升安全性,其核心价值在于显著增强账户防护能力,防止单一因素失效导致的入侵。FIDO2/WebAuthn标准利用非对称加密和挑战-响应机制,提供了基于硬件安全密钥的强认证方案,广泛应用于企业登录、特权访问等高安全需求场景。本文聚焦于如何整合开源身份提供商Authe

chunqingtai2922的博客 451

Web身份验证(WebAuthn)

WebAuthn是FIDO联盟FIDO2规范集的核心组件,是一种基于Web的API,允许网站更新其登录页面,以便在支持的浏览器和平台上添加基于FIDO的身份验证。FIDO2使用户能够利用常见设备轻松地在移动的和桌面环境中对在线服务进行身份验证。Web服务和应用程序可以-并且应该-打开此功能,通过生物识别技术,移动的设备和/或FIDO安全密钥为用户提供更轻松的登录体验-并且比单独的密码具有更高的安全性。

专注于大数据方向,区块链,前后端,数据可视化,人工智能等领域 4747

C++坦克大战源代码

【代码】C++坦克大战源代码。

强国豪,林中霖 2609

谈谈 WebAuthn

WebAuthn,即 Web Authentication,是一个用于在浏览器上进行认证的 API,W3C 将其表述为 “An API for accessing Public Key C...

奇舞周刊 7922

VMware Workstation Pro 25H2 去虚拟化精简便携版完全指南

虚拟机技术在现代开发和测试环境中扮演着重要角色,但客户机系统常因暴露虚拟化特征而被特定软件识别为“虚拟机”,导致功能受限。同时,官方 VMware Workstation Pro 安装包体积大、安装流程繁琐,难以实现移动化部署。去虚拟化通过修改 VMX 配置、屏蔽 CPUID 特征、反射宿主机硬件信息等手段降低被检测概率;精简与便携则通过裁剪非核心文件和改用脚本注册服务,实现即解压即用的轻量化形态。这类改版方案特别适合临时环境搭建、敏感软件兼容测试以及构建随身开发环境。本文从虚拟化检测原理出发,系统梳理了

weixin_34068198的博客 378

组态王7.5和SQLsever数据库交互

摘要:本文详细介绍了组态王7.5与SQL Server 2016数据库交互的实现流程,包括建立连接、数据存储与查询操作。主要内容涵盖ODBC数据源配置、数据库表格创建、数据插入及查询功能实现(含日期控件查询)

gsjkwg的博客 1580

webauthn

webauthn

qq_31650157的博客 2278

深入解析HAL_UART_Receive_IT:如何高效配置串口中断接收

本文深入解析了STM32 HAL库中`HAL_UART_Receive_IT`函数的工作原理与高效配置方法。该函数并非直接接收数据,而是作为中断接收的启动器和配置器,通过开启相关中断,由`UART_Receive_IT`在后台完成数据搬运。文章详细对比了中断与轮询模式的区别,并提供了不定长数据接收的完整实战流程、常见问题避坑指南及高级应用技巧,帮助开发者构建稳定高效的串口通信。

weixin_29162439的博客 638

NextAuth.js集成WebAuthn与Passkey:无密码身份认证实战指南

身份认证是现代Web应用的核心安全组件,其核心原理在于验证用户身份的真实性。传统的密码认证采用‘共享秘密’模型,存在泄露、撞库和钓鱼等固有风险。WebAuthn(Web Authentication API)基于公钥加密技术,通过生物特征或设备PIN绑定私钥,实现了无密码、抗钓鱼的强认证,为应用安全带来根本性提升。在工程实践中,NextAuth.js作为Next.js生态的认证标准,通过适配器(Adapter)机制和双轨制认证流程,能够优雅地集成WebAuthn,支持Passkey跨设备同步。本文聚焦于在N

weixin_30314813的博客 301

高通SDX35平台 modem启动异常分析

SDX35 MIFI项目在生产时出现modem反复重启问题。经排查发现是modem在初始化GNSS模块时访问了不存在的硬件地址导致崩溃,原因是产线使用的SDX35 000-AB型号芯片阉割了GNSS功能,而本地测试使用的AA型号支持该功能。解决方案是通过修改modem编译选项,采用高通新提供的genlmm2选项(保留IMS和SMS功能但去除GNSS支持),最终解决了启动异常问题并满足VZW认证需求。

四儿家的小祖宗的博客 275

笔试题-2023-紫光展锐-数字芯片设计【纯净题目版】

笔试题-2023-紫光展锐-数字芯片设计【纯净题目版】

w0shishabi的博客 2923

蓝鲸配置平台 bk-cmdb 容器节点查询接口(list_kube_node)实战指南

> 本文围绕蓝鲸智云配置平台(bk-cmdb)提供的「查询容器节点」API(`list_kube_node`,v3.12.1+ 引入,权限要求:业务访问)展开。文章以官方 API 文档为主体,结合仓库源码(`src/kube/types/node.go`、`src/source_controller/coreservice/service/kube/node.go` 等)从请求参数、过滤规则、分页

gitblog_00757的博客 235

092、Python在芯片验证中的应用:从脚本小子到验证架构师

Python在芯片验证中的高效应用 本文通过实际案例展示了Python在芯片验证中的关键作用。凌晨三点的调试场景揭示了传统方法的局限,Python脚本能在20分钟内分析80GB波形数据定位FIFO指针问题。文章重点介绍了两个核心工具: 智能日志分析系统:通过正则表达式和上下文分析,自动分类百万行验证日志中的错误,生成可视化报告,效率远超传统grep方法。 寄存器模型生成器:将Excel表格自动转换为UVM寄存器模型代码,将原本需要两周的手工工作缩短至两小时,同时保证零错误。 文章还展示了Python与Sys

z534437748的博客 72

WebAuthn + Passkey:无密码认证新时代

在传统身份认证体系中,——据 Verizon《2023 DBIR》报告,。而 SMS OTP、TOTP 等二次验证方式仍依赖可信通道与用户操作,无法根除中间人劫持与社会工程风险。真正的破局点,正在于。WebAuthn(Web Authentication API)作为 W3C 标准,配合现代操作系统原生支持的。

qq_46187594的博客 76

uniapp - [全端兼容] 高性能 tabbar 底部菜单凸起效果,原生系统自定义底部菜单不卡顿、切换页面不闪烁、自动缓存页面(底部菜单中间自定义一个图片并悬浮起来)

uniapp如何实现底部凸起按钮,uniapptabbar底部菜单怎么自定义,uniapp怎么让底部菜单中间突出来,uniapp自定义底部tabbar,uniapp高性能好用的底部菜单,uniapp自定义底部导航栏并解决闪烁问题,uniapp怎么设置凸起的底部tabbar,uniapp怎么用系统的底部菜单还想让中间的按钮凸起来,uniapp自定义tabbar性能不好怎么办,uni-app自定义导航栏实现中间凸起效果,uniapp底部导航栏中间圆形按钮凸起效果详细代码,uni-app自定义中间图标突起的

🏆 前端领域优质创作者 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

无密码身份认证演进路线怎么落地:安当ASP的平滑迁移实践

从短信验证码到设备绑定的无密码演进,是企业身份管理绕不开的升级路径,本文拆解 FIDO2/WebAuthn 全流程与渐进切流方案。

m0_75002133的博客 161

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

超大规模密码泄露事件下的身份认证安全重构

在此基础上,提出一套面向后密码时代的身份认证安全重构框架,涵盖技术层面(如无密码认证、FIDO2/WebAuthn)、管理层面(如零信任架构、凭证生命周期治理)及用户行为干预机制。2025年6月,由Cybernews联合安全研究员Vilius Petkauskas披露的一起数据泄露事件引发全球关注:超过160亿条结构化用户凭证(包括邮箱、用户名与明文密码)在暗网流通,覆盖Apple、Google、Facebook、GitHub、Telegram等主流平台,部分甚至涉及政府与企业内部系统。

1598

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

无密码终端体系科普:以 Windows Hello 为核心的全域身份方案

传统密码属于 “所知因子” 认证,只要凭证被窃取,攻击者即可远程登录,不存在设备绑定约束。第三层面向互联网应用,依托 FIDO2/WebAuthn 协议,支持通行密钥(Passkey),实现浏览器、第三方业务平台无密码登录,形成 “一台设备,全域通行” 的身份闭环。在此背景下,基于 FIDO2 标准的无密码身份体系逐步落地,Windows Hello 作为 Windows 原生内置认证载体,构建起覆盖本地终端、内网系统、云端应用的全域无密码身份框架,成为终端安全升级的主流选择。

2601_96236497的博客 229

dsh-purge 安装完整指南:一条命令装好,一行命令验证生效

dsh-purge 是装在本机 DeepSeek Harness 上的提示词注入与受控评测插件,可为不同模型换不同注入提示词,把模型自身行为与宿主侧拦截剥开。这篇 dsh-purge 安装指南:几条命令装完,一行命令确认生效。 ## 核对宿主与 Node,确认能装 先过两道门槛:Node 版本 ≥18;Windows 上要无闪窗运行,得 Node ≥22。再按宿主形态对号入座,这个 DeepS

gitblog_00197的博客 402

终极WebAuthn实战指南:从源码解析到安全部署的完整路径

WebAuthn (FIDO2) 是现代Web安全认证的黄金标准,本指南将带你深入了解GitHub加速计划中的web/webauthn项目——一个用Go语言编写的强大WebAuthn服务器库。通过本教程,你将掌握如何从零开始集成WebAuthn认证系统,为你的应用添加安全无密码登录功能。 ## 📋 什么是WebAuthn?为什么它至关重要? WebAuthn是W3C和FIDO联盟联合制定的无

gitblog_01004的博客 413

基于NextAuth.js与WebAuthn实现无密码登录:原理、配置与实战

身份认证是保障应用安全的核心环节,传统的密码机制面临着撞库、钓鱼等安全风险。公钥加密技术提供了一种更安全的解决方案,其核心原理是‘挑战-响应’机制,通过非对称密钥对实现身份验证,私钥永不离开用户设备,从根本上杜绝了密码泄露的可能。这项技术的工程价值在于构建了无需记忆密码、且抗攻击性强的认证体系,广泛应用于对安全性要求高的金融、企业应用等场景。本文聚焦于如何在现代Web开发中落地这一技术,详细解析了如何利用NextAuth.js这一身份验证库,结合WebAuthn标准,为Next.js应用快速集成基于生物识别

weixin_34226182的博客 361

webauthn介绍及应用

官网:https://webauthn.io/webauthn即Web Authentication,是一个符合W3C标准的Web认证规范。它通过公私钥加密技术,实现无密码认证,用户仅需通过pin码、指纹、面部识别、usb key等方式,即可实现整套注册登录流程。使用webauthn,web网站的整个认证流程将得到极大简化,同时,相比传统的密码认证,webauthn的安全性更高。在介绍原理之前,先简单介绍一下公钥、私钥是什么东西,防止有人不清楚。

zxz547388910的博客 2228

安当OTP:与 FIDO2/WebAuthn 协同演进——从 TOTP 双因素到无密码认证路线

从 OATH TOTP 动态口令的算法原理出发,拆解它与 WebAuthn/FIDO2 无密码认证的协同架构与分阶段迁移路线。

m0_75002133的博客 125

WebAuthn-ruby完整教程:从零构建支持Passkeys的Ruby身份验证系统

WebAuthn-ruby是一款强大的Ruby服务器库,能让你的Ruby/Rails Web服务器成为符合标准的WebAuthn依赖方,轻松实现Passkeys身份验证功能。本教程将带你从零开始,一步步构建安全、现代的身份验证系统。 ## 🚀 什么是WebAuthn和Passkeys? WebAuthn是一项国际标准,允许用户使用安全设备(如指纹传感器、硬件密钥或手机)进行身份验证,无需密码

gitblog_00043的博客 618

告别密码时代:从“你记的密码”到“你拥有的钥匙”的安全革命

无密码认证正在终结传统密码时代,它用“你拥有的设备+生物特征”替代“你记住的密码”,从根本上解决密码泄露、钓鱼攻击和记忆负担三大难题,开启更安全便捷的数字身份新纪元。

weixin_43172311的博客 525

spring - oauth - server v3.0.1发布,新增免密登录功能

而数据库编码的优化也反映了对数据多样性的重视。对于一些需要在数据中使用表情符号的场景,如社交、聊天等应用,该优化能提升用户体验,避免因编码问题导致表情符号显示异常。spring - oauth - server v3.0.1的更新紧跟行业趋势,免密登录和数据库编码优化等功能亮点突出,有望在互联网应用开发中得到广泛应用,推动行业技术升级。spring - oauth - server v3.0.1正式发布,此次版本升级增加了免密码登录的Passkey功能,还在数据库编码、文件安全说明等方面进行了更新。

yuyanhome的博客 29
上一篇: 使用frp实现内网穿透教程
霁晨晨晨
博客等级 码龄4年 359粉丝 32原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霁晨晨晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值