WebAuthn代理:基于Go的安全认证中间件
项目介绍
WebAuthn_proxy 是一个由Go语言编写的代理服务,旨在增强Web应用程序的安全性,通过实现WebAuthn标准来支持硬件令牌(如YubiKey)、Apple Touch ID或Windows Hello等现代认证方式。该项目设计初衷是为了无缝融入DevOps生态系统中,特别是利用Docker和Ansible进行配置管理,并易于集成到现有的服务部署架构里,如在NGinx或OpenResty等反向代理后工作。
目标是创建一个灵活配置且便于运维的WebAuthn模块,允许团队通过标准的工具链进行管理,并能够与其他安全代理,比如OAuth2 Proxy,串联使用以提升认证层级。
项目快速启动
通过Docker快速部署
对于希望快速体验WebAuthn_proxy的用户,可以直接利用Docker容器运行:
docker run --rm -p 8080:8080 quiq/webauthn_proxy:latest
若想自定义配置文件路径,可以这样做:
docker run --rm -p 8080:8080 -v /your/local/path/to/config:/opt/config:ro quiq/webauthn_proxy:latest
这里 /your/local/path/to/config
应替换为你本地存储配置文件的路径。
手动构建并运行
如果你更倾向于手动构建,首先确保你的环境中已安装Golang,然后执行以下命令:
go build -o webauthn_proxy && chmod +x webauthn_proxy
./webauthn_proxy -v
记得准备必要的配置目录和文件(config/ 和 static/)。
应用案例与最佳实践
案例一:集成于NGinx
在NGinx中,可以通过auth_request
指令配置WebAuthn_proxy作为前置认证服务:
location / {
auth_request /webauthn/auth;
error_page 401 = /webauthn/login;
proxy_set_header X-Real-IP $remote_addr;
}
location = /webauthn/auth {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
最佳实践:结合OAuth2 Proxy
为了增强安全性层次,可将WebAuthn_proxy与OAuth2 Proxy串联使用。这种方式可以在身份验证层添加额外的身份确认步骤。
location / {
auth_request /oauth2/auth;
auth_request_set $email $upstream_http_x_auth_request_email;
error_page 401 = /oauth2/start?rd=$uri;
...
# 配置指向WebAuthn_proxy
location = /webauthn/auth {
proxy_pass http://127.0.0.1:8080/webauthn/auth;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
}
}
典型生态项目结合
WebAuthn_proxy不仅独立存在,它还能与一系列现代Web服务基础设施结合使用,例如:
- OAuth生态: 通过与OAuth2 Proxy的组合,提供双因素或多因素认证选项。
- 微服务架构: 在API网关前部署,保护内部服务免受未经授权访问。
- 单点登录(SSO): 结合其他身份管理解决方案,实现基于WebAuthn的SSO场景。
通过这些策略和实施,WebAuthn_proxy加强了企业的网络安全防线,尤其适合那些寻求高级别身份验证方案的组织。