HBB's Blog

Ordinary road, record every bit

使用群晖SSO为本地Fava服务添加鉴权的实践指南

背景痛点:Fava的无鉴权风险

Fava 作为开源的Beancount Web界面,默认未提供身份验证模块。

当我们在内网部署后,任何能访问该服务的用户都可以直接查看完整的财务数据,这显然不符合安全实践要求。

本文将展示如何利用现有群晖NAS的SSO服务,以零开发成本实现安全认证。

架构设计:Docker Compose解决方案

我们采用三层架构设计:

用户请求 → Nginx(SSO鉴权) → Fava服务

通过Docker Compose实现服务编排,具体容器配置如下,省略了部分配置,可在底部查看详细配置:

fava:
container_name: fava_server
environment:
- TZ=Asia/Shanghai
# 不对外暴露端口

sso_gateway:
image: nginx:latest
container_name: sso_gateway
ports:
- "8111:8111" # 对外暴露端口
volumes:
- ./sso_nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- sso_auth
- fava

sso_auth:
container_name: sso_auth
depends_on:
- fava

必备条件

  • 有一台安装了群晖系统的NAS
  • 有自己的私有fava github 账单仓库并通过git-crypt加密
  • 拥有一个域名+该域名的HTTPS证书
  • 通过域名+端口号能够访问到你自己的群晖DSM
    • 如果暂时没有域名也可以在本机先手动host测试

群晖SSO配置详解(以DSM 7.2为例)

首先在群晖的套件中心安装SSO服务器,安装好后下面配置SSO服务。

  1. SSO服务器 → 常规设置

    • 账户类型:选择域/LDAP/本地
    • 服务器URL:输入你的DSM地址,记得携带端口号 dsm.yourdomain.com:5000
  2. SSO服务器 → 服务 → OIDC

    • 开启OIDC服务,并记录Well-known URL
  3. SSO服务器 → 应用程序 → 新增

    • 选择SSO协议:OIDC
    • 应用名称: Fava_Prod
    • 重定向URL: 填写你的SSO登陆回调地址,后续回调接口地址变更后需要再进入应用程序进行同步修改和添加。
  4. 获取OIDC配置参数
    创建完成后会获得两个配置参数

    • 应用程序ID
    • 应用程序密钥

开源参考

Leon2xiaowufava-sso

部署

将仓库clone下来后修改对应的配置,然后把目录中的文件都传到NAS的某个目录中,然后通过群晖的Container Manager创建项目。

详情查看