从FIDO2到无缝登录:hanko如何重塑Passkey认证标准
你是否还在为用户频繁忘记密码而烦恼?是否担忧传统密码认证带来的安全风险?hanko项目为这些问题提供了革命性解决方案。通过深度整合FIDO2/WebAuthn标准,hanko不仅实现了无密码认证的技术突破,更构建了一套完整的身份验证生态系统。本文将详细解析hanko如何推动Passkey认证标准化,以及其在实际应用中的创新实践。读完本文,你将了解:
- hanko对FIDO2/WebAuthn标准的技术实现
- Passkey认证的完整工作流程
- 多场景下的配置与集成方案
- 未来身份验证的发展趋势
hanko与FIDO2/WebAuthn标准
FIDO2(Fast IDentity Online 2)是由FIDO联盟制定的无密码认证标准,而WebAuthn(Web Authentication)是其核心组件,定义了基于公钥加密的网页认证API。hanko作为"Passkey时代的身份验证与用户管理"解决方案,深度实现并扩展了这些标准。
hanko的核心架构包括backend和frontend/elements两大模块。后端使用Go语言构建,提供完整的认证API;前端则通过Web Components实现跨框架的UI组件。这种分离架构既保证了认证逻辑的安全性,又简化了开发者的集成流程。
在后端实现中,backend/handler/webauthn.go是WebAuthn协议处理的核心。该文件实现了从认证初始化到凭证验证的完整流程,包括注册、认证、凭证管理等关键功能。例如,BeginRegistration函数处理WebAuthn注册请求,生成符合FIDO2标准的注册选项:
options, sessionData, err := h.webauthn.BeginRegistration(
webauthnUser,
webauthn.WithAuthenticatorSelection(protocol.AuthenticatorSelection{
RequireResidentKey: &t,
ResidentKey: protocol.ResidentKeyRequirementRequired,
UserVerification: protocol.UserVerificationRequirement(h.cfg.Passkey.UserVerification),
}),
webauthn.WithConveyancePreference(protocol.ConveyancePreference(h.cfg.Passkey.AttestationPreference)),
)
这段代码展示了hanko如何根据配置生成符合FIDO2标准的注册选项,包括居民密钥要求、用户验证级别等关键参数。
Passkey认证工作流程
hanko实现的Passkey认证流程严格遵循FIDO2/WebAuthn标准,同时针对实际应用场景进行了优化。完整流程包括四个主要阶段:初始化、凭证创建/获取、验证和会话管理。
注册流程
- 请求注册选项:客户端调用BeginRegistration API获取注册参数
- 创建凭证:用户设备生成公私钥对,创建Passkey
- 验证与存储:服务器验证凭证有效性并安全存储
关键实现位于backend/handler/webauthn.go的BeginRegistration和FinishRegistration函数。在注册过程中,hanko支持多种配置选项,如用户验证级别、认证器选择策略等,这些配置可通过backend/config/config_passkey.go进行调整:
type Passkey struct {
// `user_verification` specifies the requirements regarding local authorization
UserVerification string `yaml:"user_verification" json:"user_verification,omitempty" koanf:"user_verification" split_words:"true" jsonschema:"default=preferred,enum=required,enum=preferred,enum=discouraged"`
// `attestation_preference` is used to specify the preference regarding attestation conveyance
AttestationPreference string `yaml:"attestation_preference" json:"attestation_preference,omitempty" koanf:"attestation_preference" split_words:"true" jsonschema:"default=direct,enum=direct,enum=indirect,enum=none"`
// 其他配置...
}
认证流程
认证流程与注册类似,但重点在于验证用户持有的凭证:
- 请求认证选项:客户端调用BeginAuthentication API获取挑战
- 用户验证:用户通过生物识别或PIN码验证身份
- 验证断言:服务器验证签名断言,确认用户身份
backend/handler/webauthn.go中的BeginAuthentication和FinishAuthentication函数实现了这一流程。值得注意的是,hanko支持两种认证模式:基于用户ID的非发现式认证和基于用户句柄的发现式认证,满足不同场景需求。
配置与定制化
hanko提供了丰富的配置选项,允许开发者根据自身需求定制Passkey认证行为。这些配置主要集中在backend/config/目录下的相关文件中。
核心配置项
backend/config/config_passkey.go定义了Passkey相关的核心配置:
- UserVerification:用户验证级别,可选值为"required"、"preferred"或"discouraged"
- AttestationPreference:证明传递偏好,影响认证器证明的获取方式
- AcquireOnRegistration:注册时是否提示创建Passkey
- Limit:用户可创建的Passkey数量上限
backend/config/config_webauthn.go则定义了WebAuthn协议的基础配置:
type WebauthnSettings struct {
RelyingParty RelyingParty `yaml:"relying_party" json:"relying_party,omitempty" koanf:"relying_party" split_words:"true" jsonschema:"title=relying_party"`
Timeouts WebauthnTimeouts `yaml:"timeouts" json:"timeouts,omitempty" koanf:"timeouts" split_words:"true" jsonschema:"title=timeouts"`
}
type RelyingParty struct {
DisplayName string `yaml:"display_name" json:"display_name,omitempty" koanf:"display_name" split_words:"true" jsonschema:"default=Hanko Authentication Service"`
Id string `yaml:"id" json:"id,omitempty" koanf:"id" jsonschema:"default=localhost,examples=localhost,example.com,subdomain.example.com"`
Origins []string `yaml:"origins" json:"origins,omitempty" koanf:"origins" jsonschema:"minItems=1,default=http://localhost:8888"`
}
这些配置允许开发者自定义依赖方信息、超时设置等关键参数,以适应不同的应用场景。
多语言支持
hanko前端组件提供了完善的国际化支持,包括对Passkey相关术语的多语言翻译。在frontend/elements/src/i18n/en.ts中,我们可以看到Passkey相关的文本定义:
{
passkey: "Passkey",
signInPasskey: "Sign in with a passkey",
registerAuthenticator: "Create a passkey",
webauthnUnsupported: "Passkeys are not supported by your browser",
// 更多翻译...
}
目前支持英语、法语、德语、意大利语等多种语言,便于全球用户使用。
实际应用与集成
hanko提供了多种集成方式,满足不同开发者和应用场景的需求。无论是快速原型开发还是生产环境部署,都能找到合适的方案。
快速启动
对于想要快速体验hanko的开发者,项目提供了quickstart目录,包含完整的示例应用。通过Docker Compose可以一键启动包含前后端的完整环境:
git clone https://gitcode.com/GitHub_Trending/ha/hanko
cd GitHub_Trending/ha/hanko
docker-compose -f deploy/docker-compose/quickstart.yaml up
这将启动后端API、前端示例和数据库服务,完整展示hanko的各项功能。
前端集成
hanko的前端组件frontend/elements提供了现成的Web Components,可轻松集成到任何前端框架中。例如,在HTML中直接使用<hanko-auth>组件即可添加完整的认证界面:
<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/@teamhanko/hanko-elements@latest/dist/elements.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@teamhanko/hanko-elements@latest/dist/elements.css">
</head>
<body>
<hanko-auth api="https://your-hanko-api.com"></hanko-auth>
</body>
</html>
这种零依赖的集成方式极大降低了开发者的使用门槛。同时,组件支持丰富的自定义选项,包括样式定制、事件处理等,详情可参考frontend/elements/README.md。
后端配置
在生产环境中,管理员可以通过配置文件精细调整hanko的行为。deploy/docker-compose/config.yaml是Docker部署的默认配置文件,包含了Passkey认证的关键设置:
webauthn:
relying_party:
id: example.com
display_name: Example Service
origins:
- https://example.com
passkey:
user_verification: preferred
attestation_preference: none
acquire_on_registration: always
acquire_on_login: conditional
这些配置控制着Passkey的注册策略、用户验证要求等关键行为,管理员可根据安全需求进行调整。
未来展望
hanko项目仍在持续发展中,未来将进一步完善Passkey生态。根据项目README.md中的路线图,即将推出的功能包括:
- 组织、角色和权限管理
<hanko-menu>Web组件- 移动端SDK(iOS、Android、React Native、Flutter)
这些功能将进一步扩展hanko的应用场景,使其不仅适用于个人应用,也能满足企业级需求。
随着Passkey技术的普及,我们可以预见一个无密码的未来。hanko通过其对FIDO2/WebAuthn标准的深入实现和创新扩展,正在为这一未来铺平道路。无论是用户体验还是安全性,Passkey都显著优于传统密码,而hanko则让这种先进技术的应用变得简单可行。
总结
hanko项目通过深度整合FIDO2/WebAuthn标准,为开发者提供了一套完整的Passkey认证解决方案。其核心优势包括:
- 标准合规:严格遵循FIDO2/WebAuthn标准,确保跨平台兼容性和安全性
- 易于集成:提供现成的Web组件和API,简化开发流程
- 灵活配置:丰富的配置选项适应不同场景需求
- 安全可靠:完整的审计日志和安全最佳实践
无论是初创公司还是大型企业,都可以通过hanko快速实现安全、友好的无密码认证系统。随着Passkey技术的普及,hanko有望成为身份验证领域的重要基础设施。
如果你对hanko项目感兴趣,欢迎通过以下方式参与:
- 访问项目仓库:https://gitcode.com/GitHub_Trending/ha/hanko
- 阅读详细文档:backend/README.md
- 探索示例代码:frontend/examples
让我们共同迈向无密码的未来!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



