我以为Passkeys是大厂专属,直到我在自己的Homelab中部署了它

我以为Passkeys是大厂专属,直到我在自己的Homelab中部署了它

引言:一个意外的发现

我一直以为Passkeys是Google、Apple这些大公司才有的”高端”功能。

直到我在自己的Homelab中部署了Passkeys,才发现:这玩意儿普通人也能用,而且非常简单。

今天,我分享如何在自托管环境中部署Passkeys,让你也能享受无密码登录的便利。

问题本质:为什么需要Passkeys?

传统密码的问题

  • 密码难记:每个网站都要不同的密码
  • 密码易泄露:数据库泄露、钓鱼攻击
  • 密码管理复杂:需要密码管理器

Passkeys的优势

  • 无密码:不需要记忆密码
  • 安全:使用非对称加密
  • 防钓鱼:无法被钓鱼攻击
  • 便捷:生物识别一键登录

什么是Passkeys?

一句话解释

Passkeys = 设备生成的密钥对,私钥永远不离开设备。

工作原理

1
2
3
4
5
6
7
8
9
注册:
用户设备 → 生成密钥对
→ 私钥存在设备
→ 公钥发送给服务器

登录:
服务器 → 发送挑战
用户设备 → 用私钥签名
服务器 → 用公钥验证

Homelab部署方案

方案一:使用Authelia

Authelia:开源认证和授权服务器

步骤

  1. 安装Authelia
  2. 配置WebAuthn
  3. 启用Passkeys支持
  4. 集成到反向代理

配置示例

1
2
3
4
5
6
webauthn:
disable: false
display_name: Authelia
attestation_conveyance_preference: indirect
user_verification: preferred
timeout: 60s

方案二:使用Authentik

Authentik:开源身份提供商

步骤

  1. 安装Authentik
  2. 配置FIDO2/WebAuthn
  3. 为用户启用Passkeys
  4. 集成应用

优势

  • 支持多种认证方式
  • 良好的Web界面
  • 丰富的集成选项

方案三:使用Pocket ID

Pocket ID:轻量级Passkeys认证服务器

步骤

  1. Docker部署Pocket ID
  2. 配置反向代理
  3. 注册设备
  4. 开始使用

优势

  • 极其轻量
  • 专门为Passkeys设计
  • 部署简单

部署实战

使用Docker部署Pocket ID

docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
version: '3'
services:
pocket-id:
image: stonith404/pocket-id:latest
container_name: pocket-id
restart: unless-stopped
ports:
- "3000:3000"
environment:
- PUBLIC_APP_URL=https://passkeys.yourdomain.com
- DATABASE_URL=postgresql://user:pass@db:5432/pocketid
volumes:
- ./data:/app/data

配置反向代理

Nginx配置

1
2
3
4
5
6
7
8
9
10
11
server {
server_name passkeys.yourdomain.com;

location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

创建Passkey

  1. 访问Pocket ID界面
  2. 使用用户名和密码登录
  3. 点击”添加Passkey”
  4. 使用设备生物识别确认
  5. Passkey创建完成

与Homelab服务集成

集成Authelia

1
2
3
4
5
authentication_backend:
password_reset:
disable: true
webauthn:
disable: false

集成Nginx Proxy Manager

  1. 配置访问控制
  2. 集成Authelia/OAuth2
  3. 启用WebAuthn认证

集成自托管应用

  • Nextcloud:支持WebAuthn
  • Gitea:支持FIDO2
  • Vaultwarden:支持Passkeys解锁
  • Proxmox:可通过Authelia集成

对比分析

方案 优点 缺点
Authelia 功能完整 配置复杂
Authentik 界面友好 资源占用大
Pocket ID 轻量简单 功能较少

AISOC视角

从安全运营的角度来看:

身份管理演进

  • Passkeys是无密码认证的未来
  • 自托管可以提供更高的控制力
  • 适合中小企业和家庭环境

安全优势

  • 消除密码泄露风险
  • 防止钓鱼攻击
  • 简化凭证管理

总结

核心要点

  1. Passkeys不只是大厂专属:自托管也可实现
  2. 多种方案可选:Authelia, Authentik, Pocket ID
  3. 部署简单:Docker一键部署
  4. 安全便捷:无密码,防钓鱼

推荐方案

  • 新手:Pocket ID(最简单)
  • 进阶:Authelia(功能完整)
  • 专业:Authentik(企业级)

实用建议

  1. 从小开始:先部署Pocket ID体验
  2. 逐步扩展:根据需要升级方案
  3. 备份密钥:确保有恢复方式
  4. 保持更新:关注安全更新

Passkeys不是遥不可及的高端技术,在自己的Homelab中部署它,享受无密码登录的便利和安全。