Skip to content

feat(auth): add optional OIDC SSO login - #359

Open
mingqing wants to merge 1 commit into
AIPentest:mainfrom
mingqing:main
Open

mingqing wants to merge 1 commit into
AIPentest:mainfrom
mingqing:main

Conversation

@mingqing

Copy link
Copy Markdown

功能概述

本 PR 为 CyberStrikeAI 新增基于 OpenID Connect(OIDC) 的单点登录(SSO)功能,使其能够与 Keycloak、Dex 及其他符合 OIDC 标准的身份认证服务集成。

该功能采用可选配置,默认关闭,并保留现有的用户名、密码登录方式及 RBAC 权限体系。

本次实现以最小侵入为原则,不新增数据库表、不进行数据库迁移,尽可能复用项目原有的用户管理、Session 和权限控制机制。

主要功能

1. 标准 OIDC 登录

  • 支持 OAuth 2.0 Authorization Code Flow。
  • 支持 PKCE S256、State 和 Nonce 校验。
  • 支持 OIDC Discovery,默认从 <issuer>/.well-known/openid-configuration 获取服务端元数据。
  • 支持通过 discovery_url 自定义发现地址,以适配部分非标准部署。
  • 使用 github.com/coreos/go-oidc/v3 完成 ID Token 验证和 JWKS 公钥验证,目前支持 RS256。
  • 支持获取 UserInfo,并配置用户名和显示名称对应的 Claim。

2. 用户自动创建与账号绑定

  • 用户首次通过 OIDC 登录时,自动创建本地账号。
  • 新账号默认授予 viewer 角色,避免自动获得高权限。
  • 基于 OIDC issuer 和 sub 生成身份指纹,用于后续登录校验。
  • 避免与现有本地密码账号及内置管理员账号发生自动关联。
  • 复用项目现有 Session 和 RBAC 授权机制。

3. 登录页面集成

  • 根据配置决定是否显示 OIDC 登录入口。
  • 支持通过 login_label 自定义登录按钮文字。
  • 保留原有用户名、密码登录功能。
  • 退出登录时清理应用自身的认证会话。

4. 配置与文档

  • 新增 OIDC 配置项及示例。
  • 提供 Keycloak 和 Dex 的接入配置示例。
  • 支持配置 Issuer、Client ID、Client Secret、Redirect URI 和用户信息 Claims。
  • 支持通过 CYBERSTRIKE_OIDC_CLIENT_SECRET 环境变量提供客户端密钥。
  • 默认要求 HTTPS,允许在明确配置的隔离测试环境使用 HTTP。

配置示例

以 Keycloak 为例:

auth:
  oidc:
    enabled: true
    allow_http: false
    issuer: https://keycloak.example.com/realms/security
    client_id: cyberstrike
    redirect_uri: https://cyberstrike.example.com/api/auth/oidc/callback
    login_label: Sign in with Keycloak
    claims:
      username: preferred_username
      display_name: name

Client Secret 建议通过 CYBERSTRIKE_OIDC_CLIENT_SECRET 环境变量注入。

Dex 及其他标准 OIDC Provider 可以采用类似方式接入,具体配置请参考新增文档 docs/zh-CN/oidc-login.md。

测试验证

已完成以下检查:

  • OIDC 登录流程联调验证。
  • Go 代码格式化。
  • 标准及自定义 Discovery 地址测试。
  • HTTP 地址限制、登录按钮配置及 Cookie 安全属性测试。
  • GitHub Actions Self-update 跨平台测试通过(Ubuntu / macOS / Windows)。
  • GitHub Actions Process isolation 跨平台测试通过(Ubuntu / macOS / Windows)。

兼容性及安全边界

兼容性:

  • OIDC 默认关闭,不影响未启用 OIDC 的部署。
  • 保留现有本地账号登录方式。
  • 不新增数据库表,不需要数据库迁移。
  • 不改变现有 RBAC 权限模型。

当前实现边界:

  • 暂不支持 OIDC 用户组与本地 RBAC 角色的自动映射。
  • 暂不实现 LDAP / SCIM 用户同步。
  • 暂不支持 OIDC Provider 全局登出。
  • 暂不实现向 MCP 工具透传 OIDC Access Token。
  • 当前使用既有 password_hash 字段保存 OIDC 身份绑定标识,以避免数据库结构变更。欢迎维护者就此设计提出建议。

Integrate configurable OIDC sign-in with PKCE, discovery, verified ID tokens, local user provisioning, and Keycloak/Dex docs.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant