Authelia 是一个开源的认证系统,目前支持双因素认证和单点登陆 SSO 认证,SSO 登陆是有 Web 界面支持的。它可以很好的与反向代理进行集成,比如 nginx,Traefik,HAProxy 等,对于通过这些反向代理的服务,如果没有通过认证将会把页面重定向到登陆页面。
HTTP / HTTPS
Authelia仅适用于通过HTTPS服务的网站,因为会话cookie只能通过安全连接进行传输。请注意,我们已决定我们将不支持通过HTTP服务的网站,以避免由于配置错误而造成的任何风险。
如果需要自签名证书,则可以使用以下命令来生成一个证书:
1 2 3 4 5 |
#/tmp/certs/目录中生成一个域名example.com的证书,为期一年 docker run authelia/authelia authelia certificates generate --host shooter.com --dir /tmp/certs/ #官方这个语句有问题,啥问题你自己也看得懂 #我自己更正后的 docker run -v /tmp/certs:/tmp/certs authelia/authelia authelia certificates generate --host shooter.com --dir /tmp/certs |
Authelia 项目的架构如下:
Docker方式部署
1 2 3 |
git clone https://github.com/authelia/authelia.git cd authelia/compose/local sudo ./setup.sh #执行此命令需要sudo来修改/etc/hosts文件 |
执行后显示如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#设置你想被保护的主域名 What root domain would you like to protect? (default/no selection is example.com): shooter.com #为你的主域名生成一个SSL的证书 Generating SSL certificate for *.shooter.com #设置你鉴权(Authelia)的用户名 Enter your username for Authelia: shooter #设置你dashboard面板的显示名称(昵称) Enter your display name for Authelia (eg. John Doe): Jerry #设置你的鉴权(Authelia)的密码 Enter a password for shooter: 123456 #开始使用docker-compose安装 ./setup.sh:行97: docker-compose: 未找到命令 #安装完成 Setup completed successfully. |
1 2 3 4 5 6 7 8 |
You can now visit the following locations: - https://public.shooter.com - Bypasses Authelia - https://traefik.shooter.com - Secured with Authelia one-factor authentication - https://secure.shooter.com - Secured with Authelia two-factor authentication (see note below) You will need to authorize the self-signed certificate upon visiting each domain. To visit https://secure.shooter.com you will need to register a device for second factor authentication and confirm by clicking on a link sent by email. Since this is a demo with a fake email address, the content of the email will be stored in './authelia/notification.txt'. Upon registering, you can grab this link easily by running the following command: 'grep -Eo '"https://.*" ' ./authelia/notification.txt'. |
1 2 3 4 5 6 7 8 9 10 |
解析: 您现在可以访问以下位置;用您在设置脚本中指定的域名替换example.com: https://public.example.com-绕过Authelia https://traefik.example.com-通过Authelia一因素身份验证进行保护 https://secure.example.com-通过Authelia两因素身份验证进行安全保护(请参阅下面的注释) 在访问每个域时,您将需要授权自签名证书。要访问https://secure.example.com,您将需要注册用于二次身份验证的设备,然后单击电子邮件发送的链接进行确认。 由于这是带有伪造电子邮件地址的演示,因此电子邮件的内容将存储在中./authelia/notification.txt。注册后,您可以通过运行以下命令轻松获取此链接:grep -Eo '"https://.*" ' ./authelia/notification.txt。也可以直接查看本地 |
将要访问的域名都映射到本地hosts(生产无需这样做直接泛解析即可)
1 2 3 4 |
192.168.66.178 public.shooter.com #绕过Authelia 192.168.66.178 traefik.shooter.com #通过Authelia身份验证进行保护 192.168.66.178 secure.shooter.com #通过Authelia两因素身份验证进行安全保护 192.168.66.178 authelia.shooter.com #authelia身份验证地址 |
工作流程:
1 2 3 4 5 6 7 |
工作流程 配置了反向代理,以便每个传入请求都生成发送到Authelia(authelia.shooter.com)的身份验证请求。Authelia做出响应,并指示反向代理允许传入的请求通过,或者由于用户未经过身份验证或没有足够的授权而阻止该请求。 Step by step 当未经身份验证的用户的第一个请求命中反向代理时,由于没有将会话cookie与请求一起发送,因此Authelia确定用户未通过身份验证。因此,Austhelia将用户重定向到Authelia本身提供的身份验证门户。然后,用户可以使用该门户网站执行身份验证工作流,以获取对Authelia保护的域的所有子域均有效的会话cookie。 当用户再次访问初始网站时,查询将与会话cookie一起发送,该会话cookie在身份验证请求中转发给Authelia。这次,Austhelia可以验证用户的身份,并订购反向代理以使查询通过。 |
配置文件解读:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
############################################################### # Authelia configuration # ############################################################### host: 0.0.0.0 port: 9091 log_level: debug jwt_secret: a_very_important_secret default_redirection_url: https://public.shooter.com #默认重定向url totp: issuer: authelia.com authentication_backend: file: path: /config/users_database.yml #Authelia验证账户存放文件可接入ldap access_control: default_policy: deny rules: - domain: public.shooter.com policy: bypass #其实是bypassed绕过验证,一般生产这个不会用 - domain: traefik.shooter.com policy: one_factor #需要一个验证条件 - domain: secure.shooter.com policy: two_factor #需要两个验证条件 session: name: authelia_session secret: unsecure_session_secret expiration: 3600 # 1 hour inactivity: 300 # 5 minutes domain: shooter.com # 被保护的域名 regulation: max_retries: 3 find_time: 120 ban_time: 300 storage: local: path: /config/db.sqlite3 notifier: filesystem: filename: /config/notification.txt #发送邮件存放地点 |
测试:
1.public.shooter.com #绕过Authelia(直接可访问)
2.traefik.shooter.com #通过Authelia身份验证进行保护
1 2 3 |
输入你执行setup时候设置的验证账户登录 shooter 123456 |
验证通过后进入traefik dashboard
3. secure.shooter.com #通过Authelia两因素身份验证进行安全保护
继续进入验证页面
去notification.txt查看邮件内容
打开链接
然后使用 Authenticator 扫码加入,点击进入你就可以看到一次性密码啦
二次认证输入app上的一次性密码(这个密码大约30秒更新一次)
前提啊,前提你的这个域名要在公网可以访问,不能是像我一样写入到hosts文件的。否则这个一次性密码,你本地是无法使用的。
- 本文固定链接: https://www.yoyoask.com/?p=4619
- 转载请注明: shooter 于 SHOOTER 发表