















authentik可以将部署的各种应用进行接入,不再是在应用内进行登录,而是会被跳转到这个统一登录服务中,进行登录和鉴权。通过这个统一登陆服务,你就可以实现一个账号访问所有接入的应用。而且也可以很方便的去管理或者创建新的用户,去控制每一个用户具体的权限。我这里使用Kubernetes环境进行部署authentik来演示使用
Authentik 是一个开源的身份验证和授权框架,用于保护和授权对应用程序的访问
Authentik 的主要特点包括:
界面



技术架构

authentik 由少量组件组成
Server 容器由两个子组件组成,即实际服务器本身和嵌入式前哨。轻量级路由器将传入服务器容器的请求路由到核心服务器或嵌入式前哨。此路由器还处理对任何静态文件(例如 JavaScript 和 CSS 文件)的请求。
Core 子组件处理 authentik 的大部分逻辑,例如 API 请求、流执行、任何类型的 SSO 请求等。
Embedded outpost 与其他 Outpost 类似,此 Outpost 允许使用代理提供商,而无需部署单独的 Outpost。
/media 用于存储 icon 等,但不是必需的,如果未挂载,authentik 将允许设置图标的 URL 来代替文件上传
Background Worker 此容器执行后台任务,例如发送电子邮件、事件通知系统以及可以在前端的 System Tasks 页面上看到的所有内容。
/certs 用于 authentik 导入外部证书,在大多数情况下,这些证书不应用于 SAML,但如果使用 authentik 而不使用反向代理,则可以将其用于 Let's Encrypt 集成
/templates 用于自定义电子邮件模板,并且与其他模板一样,完全可选
中间件
这里我将redis、pg数据库进行持久化,其它默认即可
官方默认支持使用helm部署
截止2025年10月10日,helm下载Authentik镜像不需要特殊渠道,直接下载即可
helm repo add authentik https://charts.goauthentik.io
helm repo update
使用openssl创建secret私钥
root@k8s-master-01:~/authentik# openssl rand 60 | base64 -w 0
Geu5gUw/TO5RrIk6vKrFNgqpZxfg7J2aWr8DtpldD1AuNVkSKrZlNAgEfyNJ7rNo92eLKi0e0hN8oratt
创建value.yaml
authentik:
secret_key: "Geu5gUw/TO5RrIk6vKrFNgqpZxfg7J2aWr8DtpldD1AuNVkSKrZlNAgEfyNJ7rNo92eLKi0e0hN8oratt"
# This sends anonymous usage-data, stack traces on errors and
# performance data to sentry.io, and is fully opt-in
error_reporting:
enabled: true
postgresql:
password: "[此处填写PG数据库密码]]"
server:
ingress:
# Specify kubernetes ingress controller class name
ingressClassName: nginx | traefik | kong
enabled: false [这里我没有Ingress,所以直接修改为false]
hosts:
- authentik.domain.tld
postgresql:
enabled: true [开启pg]
auth:
password: "[此处填写PG数据库密码,和上面相同]]"
redis:
enabled: true
我这里没有配置Ingress,所以使用NodePort进行演示,如果有Ingress可以直接对接Ingress,和普通的服务暴露没有区别,包括后续在创建Ingress也不受影响
使用helm创建
helm upgrade --install authentik authentik/authentik -f values.yaml --namespace tools

查看helm部署状态
root@k8s-master-01:~/authentik# helm list -n tools|grep auth
authentik tools 2 2025-10-10 07:55:12.743654318 +0000 UTC deployed authentik-2025.8.4 2025.8.4
查看Pod状态
root@k8s-master-01:~/authentik# kubectl get all -n tools|grep auth
pod/authentik-postgresql-0 1/1 Running 0 40m
pod/authentik-redis-master-0 1/1 Running 0 18m
pod/authentik-server-565d4b9b9c-7dhgv 1/1 Running 0 40m
pod/authentik-worker-d8896b65c-phv5m 1/1 Running 9 (19m ago) 40m
service/authentik-postgresql ClusterIP 10.96.0.231 <none> 5432/TCP 40m
service/authentik-postgresql-hl ClusterIP None <none> 5432/TCP 40m
service/authentik-redis-headless ClusterIP None <none> 6379/TCP 55m
service/authentik-redis-master ClusterIP 10.96.1.63 <none> 6379/TCP 40m
service/authentik-server ClusterIP 10.96.3.58 <none> 80/TCP,443/TCP 40m
deployment.apps/authentik-server 1/1 1 1 40m
deployment.apps/authentik-worker 1/1 1 1 40m
replicaset.apps/authentik-server-565d4b9b9c 1 1 1 40m
replicaset.apps/authentik-worker-d8896b65c 1 1 1 40m
statefulset.apps/authentik-postgresql 1/1 40m
statefulset.apps/authentik-redis-master 1/1 18m
检查PVC持久化数据状态
root@k8s-master-01:~/authentik# kubectl get pvc -n tools|grep auth
data-authentik-postgresql-0 Bound pvc-991cd9c1-ca36-41be-93e2-6508f61fab12 8Gi RWO dsm7-nfs-client <unset> 40m
redis-data-authentik-redis-master-0 Bound pvc-07aa8c4f-7efc-4e9f-93fc-5999c3a6b1b7 8Gi RWO dsm7-nfs-client <unset> 19m
默认情况下,我们可以看到Authentik为Cluster IP无法在容器外部访问,接下来我们修改为Nodeport方式
root@k8s-master-01:~/authentik# kubectl get svc -n tools|grep authentik-server
authentik-server ClusterIP 10.96.3.58 <none> 80/TCP,443/TCP 43m
#编辑SVC
root@k8s-master-01:~/authentik# kubectl edit svc -n tools authentik-server
...
type: ClusterIP #这里将ClusterIP修改为NodePort
...

接下来再次查看svc
root@k8s-master-01:~/authentik# kubectl get svc -n tools|grep authentik-server
authentik-server NodePort 10.96.3.58 <none> 80:31112/TCP,443:30747/TCP 45m
目前就可以使用浏览器访问31112端口

安装完成后,访问 authentik http://nodeportIP:port/if/flow/initial-setup/,在这里可以为默认akadmin用户设置密码。

设置完毕后,就登录到后台界面

认证基本只有我自己使用,我目前觉得不需要开启邮箱认证,这里就没有配置,如有需要可自行查看配置
默认情况下还是使用NodePort访问,用起来比较不方便,我这里使用宝塔配置Nginx进行演示
创建反向代理配置
这里根据后端实际地址填写IP
开启websocket
在配置个证书即可,都宝塔安装了,这里不细说了。最后效果如下
目前我们Authentik已经配置好了,接下来我们通过集成Harbor进行演示

本文参考官方文档配置说明https://integrations.goauthentik.io/infrastructure/harbor/#harbor-configuration
Authentik创建应用程序
点击Application 创建应用程序
配置格式如下

这里建议打开新窗口

最后点击创建即可

Authentik创建提供程序
刚刚的创建的实际上是方便在Authentik上观看识别的,我们还需要创建提供程序用于认证
点击Application选择provider 然后创建提供程序
选择提供商类型:选择OAuth2/OpenID Connect作为提供商类型。

default-provider-authorization-explicit-consent (Authorize Application)
显式授权(Explicit Consent)
用户交互要求:必须明确展示授权页面,用户需手动点击同意按钮才能完成授权
安全性:更安全,适用于需要高安全级别的场景,如访问敏感数据
流程:通常用于授权码模式(Authorization Code Flow),授权服务器会返回授权码,客户端需用授权码换取令牌default-provider-authorization-implicit-consent (Authorize Application)
隐式授权(Implicit Consent)
用户交互要:无需用户显式点击同意,授权服务器直接返回令牌(如ID Token或Access
适用场景:适用于单页应用(SPA)等公共客户端,简化流程但安全性较低
风险: 令牌直接暴露在URL中,可能被截获,需配合短期令牌等机制降低风险

只需要创建重定向
严格的:https://harbor.company/c/oidc/callback/
这里请根据实际的Harbor地址填写 (注意不要加/线)
2

高级协议设置
范围:添加authentik default OAuth Mapping: OpenID 'offline_access'到选定范围

Subject模式选择基于用户名,这样后续配置权限也是使用用户名登录的

接下来保存即可,保存完毕后还需要关联应用程序,否则就是下面提示

返回应用程序,配置应用程序提供着


Harbor配置
上面配置完毕后就登录到Harbor后台,配置Harbor信息

认证选择OIDC
OIDC认证信息在提供者程序中查看
配置截图如下

配置完成后我们保存退出,返回首页就可以看到多了一个窗口
点击新配置的登录测试,默认会跳转到认证页面,我们点击允许

点击允许后会自动跳转到Harbor地址

点击用户中心,测试用户是否正常

测试用户登陆
[root@ops ~]# docker login harbor.frps.cn
Username: akadmin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded

此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。