背景痛点:Fava的无鉴权风险
Fava 作为开源的Beancount Web界面,默认未提供身份验证模块。
当我们在内网部署后,任何能访问该服务的用户都可以直接查看完整的财务数据,这显然不符合安全实践要求。
本文将展示如何利用现有群晖NAS的SSO服务,以零开发成本实现安全认证。
架构设计:Docker Compose解决方案
我们采用三层架构设计:
|
通过Docker Compose实现服务编排,具体容器配置如下,省略了部分配置,可在底部查看详细配置:
|
必备条件
- 有一台安装了群晖系统的NAS
- 有自己的私有fava github 账单仓库并通过
git-crypt
加密 - 拥有一个域名+该域名的HTTPS证书
- 通过域名+端口号能够访问到你自己的群晖DSM
- 如果暂时没有域名也可以在本机先手动host测试
群晖SSO配置详解(以DSM 7.2为例)
首先在群晖的套件中心安装SSO服务器,安装好后下面配置SSO服务。
SSO服务器 → 常规设置
- 账户类型:选择
域/LDAP/本地
- 服务器URL:输入你的DSM地址,记得携带端口号
dsm.yourdomain.com:5000
- 账户类型:选择
SSO服务器 → 服务 → OIDC
- 开启OIDC服务,并记录
Well-known URL
- 开启OIDC服务,并记录
SSO服务器 → 应用程序 → 新增
- 选择SSO协议:OIDC
- 应用名称: Fava_Prod
- 重定向URL: 填写你的SSO登陆回调地址,后续回调接口地址变更后需要再进入应用程序进行同步修改和添加。
获取OIDC配置参数
创建完成后会获得两个配置参数- 应用程序ID
- 应用程序密钥
开源参考
部署
将仓库clone下来后修改对应的配置,然后把目录中的文件都传到NAS的某个目录中,然后通过群晖的Container Manager创建项目。
