Skip to content

feat(auth): support OIDC login#348

Open
dongmucat wants to merge 1 commit intomainfrom
feature/oidc-login
Open

feat(auth): support OIDC login#348
dongmucat wants to merge 1 commit intomainfrom
feature/oidc-login

Conversation

@dongmucat
Copy link
Copy Markdown
Collaborator

概述

支持基于 Spring Security OAuth2 Client 的 OIDC 登录,复用现有 OAuth 准入、身份绑定和会话建立链路。

变更内容

后端实现

  • 新增 CustomOidcUserService,将 OIDC subemailemail_verifiedpreferred_usernamenamepicture 归一化为现有 OAuthClaims
  • SecurityConfigoauth2Login().userInfoEndpoint() 中接入 oidcUserService
  • 抽出 OAuthLoginFlowService.authenticate(OAuthClaims),让 OAuth2 与 OIDC 共用 AccessPolicyIdentityBindingService
  • 无 DB migration 变更
  • 无 Controller/API 契约变更

前端实现

  • 未修改前端代码
  • OIDC registration 会通过现有 /api/v1/auth/methods 作为 OAUTH_REDIRECT 登录方式暴露,登录页现有 OAuth 区域自动渲染入口

测试覆盖

  • 后端单测:新增 CustomOidcUserServiceTest,覆盖 OIDC claims 映射、头像字段同步、平台角色注入和 fallback 登录名
  • 前端单测:不涉及
  • E2E 测试:不涉及 web/src/**/*.ts(x) 变更,未触发 Playwright E2E 要求

质量门禁

  • make typecheck-web 不适用(无前端变更)
  • make lint-web 不适用(无前端变更)
  • make test-frontend 不适用(无前端变更)
  • make test-backend-app 通过
  • Playwright E2E 不适用(无 UI 交互变更)
  • make generate-api 不适用(无 Controller 变更)

安全考虑

  • OIDC 登录不绕过既有准入策略,继续通过 AccessPolicy 判断开放、域名、provider allowlist 或 subject whitelist
  • 用户绑定继续基于 identity_binding(provider_code, subject),无需新增表结构
  • 会话建立继续由现有 OAuth success handler 和 PlatformSessionService 处理
  • 敏感 client id/secret 只通过部署环境变量配置,未写入仓库

相关 Issue

Closes #315

测试说明

本地验证步骤

  1. 配置 OIDC 环境变量,例如 SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OIDC_CLIENT_IDSPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OIDC_CLIENT_SECRETSPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_OIDC_ISSUER_URI
  2. 启动本地开发环境:make dev-all
  3. 访问 /login,在 OAuth tab 查看 OIDC 登录入口
  4. 点击后应跳转到 /oauth2/authorization/oidc 并由后端处理 /login/oauth2/code/oidc 回调

回归测试范围

  • OAuth2 登录入口列表:/api/v1/auth/methods
  • GitHub/GitLab OAuth 登录链路
  • 本地账号登录链路
  • OIDC claims 到平台账号的身份绑定

截图/录屏(如有 UI 变更)

无 UI 变更。

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.

[Feature] 支持oidc登录

1 participant