OAuth2 身份验证:使用 Authentik 实现安全登录

使用 Authentik 作为您的身份提供商来实施 OAuth2 身份验证。涵盖 OIDC 流程、令牌管理、会话处理和安全最佳实践的完整指南。

E

ECOSIRE Research and Development Team

ECOSIRE 团队

2026年3月5日2 分钟阅读312 字数

OAuth2 身份验证:使用 Authentik 实现安全登录

身份验证是任何 Web 应用程序中最安全的组件,但 61% 的数据泄露涉及凭据泄露。 使用 Authentik 等专用身份提供商实施 OAuth2,可将身份验证问题与应用程序逻辑分开,从而实现单点登录、MFA 和集中式用户管理。

要点

  • OAuth2 授权代码流与 PKCE 是 Web 应用程序的推荐模式
  • Authentik 提供具有 OIDC、SAML 和 LDAP 支持的自托管身份提供商
  • 用于令牌存储的 HttpOnly cookie 可防止基于 XSS 的令牌盗窃
  • 具有短 TTL 的一次性交换代码可防止 URL 中的令牌暴露

OAuth2 流程概述

PKCE 授权代码流程

  1. 用户单击登录:应用程序重定向到 Authentik 授权端点
  2. 用户身份验证:在 Authentik 登录页面上输入的凭据(和 MFA)
  3. 已发出授权代码:Authentik 使用短期代码重定向回来
  4. 令牌交换:后端交换访问和刷新令牌的代码
  5. 会话建立:令牌存储在 HttpOnly cookie 中

此流程可确保凭据永远不会接触您的应用程序、服务器到服务器的令牌交换,并且授权代码是一次性的且具有短 TTL。


真实设置

提供者配置

在 Authentik 中创建 OAuth2/OIDC 提供程序,其中包含机密客户端类型、唯一客户端 ID、强客户端机密、精确重定向 URI、openid/个人资料/电子邮件范围和适当的令牌生命周期(访问:5-15 分钟,刷新:7-30 天)。

将提供程序绑定到 Authentik 应用程序,以通过基于组成员身份、属性或 IP 限制的策略来控制访问。

多重身份验证

配置 MFA 选项:TOTP(Google 身份验证器、Authy)、WebAuthn(硬件安全密钥、生物识别)和 SMS/电子邮件代码作为后备。


后端实现

授权重定向

使用 client_id、response_type=code、redirect_uri、范围、随机状态参数(CSRF 保护)和 PKCE code_challenge 将用户重定向到 Authentik。

代币交换

在回调时,使用 grant_type=authorization_code、收到的代码、redirect_uri、客户端凭据和 PKCE code_verifier 交换服务器到服务器的授权代码。响应包含access_token、refresh_token、id_token和过期信息。

安全令牌存储

切勿将令牌存储在 localStorage 或 sessionStorage 中 - 任何 JavaScript 都可以访问它们,包括 XSS 有效负载。使用带有安全标志、SameSite=Lax 和适当过期时间的 HttpOnly cookie。


前端集成

登录流程

用户单击“登录”,前端重定向到授权 URL,用户在 Authentik 上进行身份验证(您的应用程序永远不会看到凭据),Authentik 使用代码重定向回来,后端交换代码并设置 HttpOnly cookie,前端调用当前用户数据的会话端点。

会话管理

创建一个 useAuth() 挂钩,在挂载时调用 GET /auth/session。如果通过身份验证,则返回用户数据;如果未通过身份验证,则重定向到登录。注销时,调用 POST /auth/logout 来清除 cookie。

受保护的路由

使用中间件在页面呈现之前重定向未经身份验证的用户。在 Next.js 中,proxy.ts 文件通过检查受保护路由上的身份验证 cookie 来处理此问题。


安全最佳实践

令牌安全

  • 专门使用 HttpOnly cookie —— 绝不向 JavaScript 公开令牌
  • 访问令牌生命周期短(5-15 分钟)
  • 令牌刷新轮换(每次使用新的刷新令牌)
  • 客户端秘密仅存储在后端,从不存储在前端代码中

重定向安全

  • 根据白名单验证所有重定向 URL
  • 拒绝以 // 开头的重定向(协议相关 URL)
  • 切勿在 URL 参数中包含令牌
  • 使用 60 秒 TTL 的一次性交换代码

会话安全

  • 身份验证后重新生成会话标识符
  • 实施空闲超时(30分钟)和绝对超时(8小时)
  • 记录所有身份验证事件以进行审计跟踪
  • 限制登录尝试速率以防止暴力破解

Authentik 高级功能

用户注册

使用可自定义的注册流程配置自助用户注册。定义新帐户的必填字段、电子邮件验证步骤和审批工作流程。

品牌定制

将自定义 CSS、徽标和主题应用到 Authentik 登录页面,以获得无缝的品牌体验。自定义品牌必须通过 CSS 卷挂载或 Django ORM Branding_custom_css 字段应用。

用户联盟

通过 LDAP/Active Directory 同步将 Authentik 连接到外部用户目录,使现有企业用户无需重新创建帐户即可进行身份验证。


常见问题

问:为什么选择 Authentik 而不是 Auth0 或 Keycloak?

Authentik 是自托管(完全数据控制)、开源的,并拥有现代化的 UI。 Auth0 是 SaaS,每用户定价不断升级。 Keycloak 是自托管的,但具有更陡峭的学习曲线和较旧的 UI。 Authentik 平衡了功能、可用性和成本。

问:Authentik 可以处理数千名用户吗?

是的。 Authentik 基于 Django 和 PostgreSQL 构建,可处理大量用户群。对于10万+用户,保证足够的数据库资源,并考虑横向扩展。

问:我们如何跨多个应用程序实现 SSO?

将每个应用程序配置为具有自己的提供程序的单独 Authentik 应用程序。用户进行一次身份验证,然后通过 Authentik 会话自动登录到所有连接的应用程序。

问:社交登录怎么样?

Authentik 支持开箱即用的社交登录源——Google、GitHub、Microsoft 和其他 OAuth2 提供商。用户可以将社交帐户与其 Authentik 身份关联起来,以方便登录。


下一步是什么

对于大多数 Web 应用程序来说,具有专用身份提供商的 OAuth2 是最有影响力的安全改进。它消除了凭证处理、启用 MFA 并提供集中审计日志记录。

联系 ECOSIRE 获取身份验证实施帮助,或探索我们的 Odoo 实施服务 以实现安全 ERP 部署。


由 ECOSIRE 发布——帮助企业利用企业软件解决方案进行扩展。

E

作者

ECOSIRE Research and Development Team

在 ECOSIRE 构建企业级数字产品。分享关于 Odoo 集成、电商自动化和 AI 驱动商业解决方案的洞见。

通过 WhatsApp 聊天