Skip to content

[codex] add Rodak desktop browser auth - #21

Merged
ronger-x merged 2 commits into
masterfrom
codex/rodak-browser-auth
May 10, 2026
Merged

[codex] add Rodak desktop browser auth#21
ronger-x merged 2 commits into
masterfrom
codex/rodak-browser-auth

Conversation

@ronger-x

Copy link
Copy Markdown
Member

变更说明

  • 新增 Rodak 桌面端浏览器授权桥:授权码 + PKCE、桌面 refresh、桌面 logout。
  • 新增会员客户端会话模型、Flyway V440、设备/安全中心接口与前端安全中心页面。
  • 兼容 standalone 前端部署,提供 /auth/desktop/authorize 授权确认页,并在用户菜单加入账号安全入口。
  • 补充 DesktopOAuthServiceImpl 单元测试,覆盖授权码一次性使用、过期、PKCE、redirect_uri 与刷新/撤销场景。

关联规范

  • 规范链接: 本轮 Rodak 浏览器授权实现计划(Codex 线程)
  • 规范状态: Implemented

自检清单

  • 规范已评审并批准
  • 实现与规范一致
  • 影响评估已更新 (性能/兼容性/回滚)
  • 必要的测试已补充或更新

验证

  • mvn -pl mortise-member/mortise-member-api -am test -Dtest=DesktopOAuthServiceImplTest '-Dsurefire.failIfNoSpecifiedTests=false'
  • pnpm --filter @mortise/site typecheck
  • mvn -pl mortise-app -am clean package -DskipTests
  • 已部署并验证 https://rymcu.com/topics/collections/auth/desktop/authorize/security
  • 线上真实 API 链路已验证:登录、授权码、PKCE 换 token、设备列表包含会话、撤销测试会话。

回滚

  • 后端 jar 备份:/opt/mortise/mortise.jar.bak-20260510200256
  • 前端 .output 备份:/opt/mortise/frontend/site/.output.bak-20260510200349
  • 数据库备份:/opt/mortise/backups/db/mortise-pre-rodak-auth-20260510195611.sql.gz

@ronger-x
ronger-x marked this pull request as ready for review May 10, 2026 13:30
Copilot AI review requested due to automatic review settings May 10, 2026 13:30

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

该 PR 在 mortise-member 增加 Rodak 桌面端浏览器授权桥(授权码 + PKCE、refresh、logout),并引入“会员客户端会话”数据模型与安全中心接口;同时更新前端(site + standalone 模板)增加授权确认页与账号安全中心页面,并在 core-sdk 中补齐调用与类型。

Changes:

  • 新增桌面端 OAuth 授权桥服务与接口:授权码缓存、PKCE 校验、token 兑换/刷新、logout/撤销会话。
  • 新增会员客户端会话表(Flyway V440)及对应的 Mapper/实体/Service,实现会话创建、活跃更新时间、撤销。
  • 前端新增 /auth/desktop/authorize 授权确认页与 /security 安全中心页;core-sdk 增加相应 API 方法与类型,并在站点/模板导航加入入口。

Reviewed changes

Copilot reviewed 35 out of 36 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
mortise-member/mortise-member-infra/src/main/resources/db/migration/V440__Create_Member_Client_Session_Table.sql 新增会员客户端会话表、索引与 updated_time 触发器
mortise-member/mortise-member-infra/src/main/java/com/rymcu/mortise/member/mapper/MemberClientSessionMapper.java 新增会话表 Mapper
mortise-member/mortise-member-domain/src/main/java/com/rymcu/mortise/member/entity/MemberClientSession.java 新增会话实体与逻辑删除标记
mortise-member/mortise-member-domain/src/main/java/com/rymcu/mortise/member/constant/MemberJwtConstants.java JWT claim 增加 sid/clientId/loginChannel/scope 等常量
mortise-member/mortise-member-domain/src/main/java/com/rymcu/mortise/member/constant/DesktopOAuthConstants.java 桌面端授权桥常量(clientId、grant_type、cache key 等)
mortise-member/mortise-member-application/src/main/java/com/rymcu/mortise/member/service/MemberClientSessionService.java 会话 Service 接口(创建/触达/列表/撤销)
mortise-member/mortise-member-application/src/main/java/com/rymcu/mortise/member/service/impl/MemberClientSessionServiceImpl.java 会话 Service 实现(落库、活跃时间更新、撤销)
mortise-member/mortise-member-api/src/test/java/com/rymcu/mortise/member/api/service/impl/DesktopOAuthServiceImplTest.java 桌面端授权桥核心场景单测(一次性 code、过期、PKCE、刷新/撤销)
mortise-member/mortise-member-api/src/main/java/com/rymcu/mortise/member/api/service/impl/DesktopOAuthServiceImpl.java 授权码创建、PKCE 校验、token 兑换/刷新、logout/撤销逻辑
mortise-member/mortise-member-api/src/main/java/com/rymcu/mortise/member/api/service/DesktopOAuthService.java 桌面端授权桥 Service API
mortise-member/mortise-member-api/src/main/java/com/rymcu/mortise/member/api/model/MemberClientSessionResponse.java 会话列表响应 DTO(record)
mortise-member/mortise-member-api/src/main/java/com/rymcu/mortise/member/api/model/DesktopTokenResponse.java 桌面端 token 响应 DTO(record)
mortise-member/mortise-member-api/src/main/java/com/rymcu/mortise/member/api/model/DesktopTokenRequest.java 桌面端 token 请求 DTO(record)
mortise-member/mortise-member-api/src/main/java/com/rymcu/mortise/member/api/model/DesktopLogoutRequest.java 桌面端 logout 请求 DTO(record)
mortise-member/mortise-member-api/src/main/java/com/rymcu/mortise/member/api/model/DesktopAuthorizeResponse.java 授权确认返回回调地址 DTO(record)
mortise-member/mortise-member-api/src/main/java/com/rymcu/mortise/member/api/model/DesktopAuthorizationCodePayload.java 授权码缓存载荷 DTO(record)
mortise-member/mortise-member-api/src/main/java/com/rymcu/mortise/member/api/controller/MemberSecurityController.java 安全中心:会话列表与撤销接口
mortise-member/mortise-member-api/src/main/java/com/rymcu/mortise/member/api/controller/DesktopOAuthController.java 桌面端授权桥 Controller(authorize/token/logout)
mortise-member/mortise-member-api/src/main/java/com/rymcu/mortise/member/api/config/AppSecurityConfigurer.java 放行桌面端 token/logout 为公开接口
frontend/templates/standalone/package.json standalone 模板补齐 Nuxt 相关依赖
frontend/templates/standalone/nuxt.config.ts standalone 模板配置 desktopAuthorizePath
frontend/templates/standalone/app/types/security.ts standalone 安全中心类型定义
frontend/templates/standalone/app/pages/security.vue standalone 安全中心页面(会话列表/撤销)
frontend/templates/standalone/app/pages/auth/login.vue standalone 登录页移除 returnToChat 逻辑
frontend/templates/standalone/app/pages/auth/desktop/authorize.vue standalone 授权确认页(调用 authorizeDesktopClient)
frontend/templates/standalone/app/composables/useMemberSecurity.ts standalone 安全中心 composable(拉取/撤销会话)
frontend/templates/standalone/app/components/AppHeader.vue standalone 用户菜单增加“账号安全”入口
frontend/pnpm-lock.yaml 锁文件更新(新增 Nuxt 依赖)
frontend/packages/core-sdk/src/types.ts core-sdk 新增桌面端授权/会话相关类型
frontend/packages/core-sdk/src/member.ts core-sdk 新增授权/会话 API(authorizeDesktopClient、fetch/revoke sessions)
frontend/apps/site/package.json site app 补齐 Nuxt 相关依赖
frontend/apps/site/app/types/security.ts site 安全中心类型定义
frontend/apps/site/app/pages/security.vue site 安全中心页面(会话列表/撤销)
frontend/apps/site/app/pages/auth/desktop/authorize.vue site 授权确认页(调用 authorizeDesktopClient)
frontend/apps/site/app/composables/useMemberSecurity.ts site 安全中心 composable(拉取/撤销会话)
frontend/apps/site/app/components/AppHeader.vue site 用户菜单增加“账号安全”入口
Files not reviewed (1)
  • frontend/pnpm-lock.yaml: Language not supported

Comment on lines +234 to +236
Member member = getActiveMember(memberId);
return buildTokenResponse(member, session, DesktopOAuthConstants.DEFAULT_SCOPE, request.refreshToken());
}
Comment on lines +79 to +83
session.getLastActiveAt(),
session.getRevokedAt(),
session.getCreatedTime(),
false
);
Comment on lines +42 to +52
function formatTime(value?: string | null): string {
if (!value) {
return '暂无记录'
}
return new Intl.DateTimeFormat('zh-CN', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit'
}).format(new Date(value))
Comment on lines +30 to +40
function formatTime(value?: string | null): string {
if (!value) {
return '暂无记录'
}
return new Intl.DateTimeFormat('zh-CN', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit'
}).format(new Date(value))
@ronger-x
ronger-x merged commit 2958c05 into master May 10, 2026
1 check passed
@ronger-x
ronger-x deleted the codex/rodak-browser-auth branch May 10, 2026 14:57
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.

2 participants