Melody AuthMelody Auth
  • 认证服务器设置
  • 管理面板设置
  • 邮箱提供商设置
  • 短信提供商设置
  • 外部身份提供商

    • 社交登录提供商设置
    • OIDC SSO 设置
    • SAML SSO 设置
  • 主要功能

    • 身份认证
    • JWT & JWKS
    • 多重认证(MFA)
    • 角色权限控制(RBAC)
    • 策略(policy)
    • 组织(organization)
  • 其他功能

    • 用户属性
    • 应用横幅
    • 组织分组
    • 模拟登录
    • 日志管理
  • 定制化

    • 认证服务器配置
    • 品牌与主题
    • 语言本地化
  • 前端 SDK

    • React SDK
    • Angular SDK
    • Vue SDK
    • Web SDK
  • 后端 API

    • 服务间认证 API 设置
    • 服务间认证 API Swagger
    • 嵌入式认证 API 设置
    • 嵌入式认证 API Swagger
  • 部署流水线
  • 轮换 JWT 密钥
  • English
  • zh-CN
  • 认证服务器设置
  • 管理面板设置
  • 邮箱提供商设置
  • 短信提供商设置
  • 外部身份提供商

    • 社交登录提供商设置
    • OIDC SSO 设置
    • SAML SSO 设置
  • 主要功能

    • 身份认证
    • JWT & JWKS
    • 多重认证(MFA)
    • 角色权限控制(RBAC)
    • 策略(policy)
    • 组织(organization)
  • 其他功能

    • 用户属性
    • 应用横幅
    • 组织分组
    • 模拟登录
    • 日志管理
  • 定制化

    • 认证服务器配置
    • 品牌与主题
    • 语言本地化
  • 前端 SDK

    • React SDK
    • Angular SDK
    • Vue SDK
    • Web SDK
  • 后端 API

    • 服务间认证 API 设置
    • 服务间认证 API Swagger
    • 嵌入式认证 API 设置
    • 嵌入式认证 API Swagger
  • 部署流水线
  • 轮换 JWT 密钥
  • English
  • zh-CN
  • 模拟登录(Impersonation)

模拟登录(Impersonation)

允许具有特权的管理员在特定应用中以其他用户身份操作,用于支持与问题排查。

工作原理

  • 具有允许角色的管理员为目标用户和 SPA 应用触发模拟登录。
  • 服务器为目标用户签发一个短期有效的 refresh_token,并将其归属于模拟执行者。
  • 前端使用该 refresh_token 获取目标用户会话的 access token。

注意:

  • 仅支持 SPA 应用进行模拟登录。
  • 如果应用要求用户授权,目标用户必须已授权,否则请求将被拒绝。

服务器端角色配置

文件:server/src/configs/variable.ts

  • 将允许进行模拟的自定义角色添加到 S2sConfig.impersonationRoles。
  • 默认值为 [Role.SuperAdmin]。

示例:

export const S2sConfig = Object.freeze({
  impersonationRoles: [Role.SuperAdmin, Role.SupportAdmin, Role.OrgAdmin],
})

修改后请重新部署或重启认证服务器。

Admin Panel 访问控制配置

文件:admin-panel/tools/access.ts

要让自定义角色在 Admin Panel 中使用模拟功能:

  • 将角色添加到 AllowedRoles。
  • 在 RoleAccesses[YourRole] 中添加 Access.Impersonation。通常还需要添加基础读取权限(如 ReadUser、ReadApp)。

示例:

export const AllowedRoles = [
  typeTool.Role.SuperAdmin,
  typeTool.Role.SupportAdmin,
]

export const RoleAccesses = {
  [typeTool.Role.SuperAdmin]: [
    // ...已有权限
    Access.Impersonation,
  ],
  [typeTool.Role.SupportAdmin]: [
    Access.ReadUser,
    Access.ReadApp,
    Access.Impersonation,
  ],
}

确保管理员账户已被分配到正确的角色。

在 Admin Panel 中使用

  • 打开用户详情页并选择“Impersonate”。
  • 选择一个 SPA 应用。如果需要用户同意且缺少同意,将提示先获取同意。
  • 成功后,你将收到一个 refresh_token,以及每个应用重定向 URI 的便捷链接:
    • https://your-app.example.com/callback?refresh_token=...&refresh_token_expires_on=...&refresh_token_expires_in=...

点击链接会打开已预加载模拟 refresh token 的应用。
Impersonation

前端对模拟的处理

所有前端 SDK 会在加载时自动解析 refresh_token 查询参数并存储。

直接调用 S2S API

如果需要自行生成模拟登录的 refresh token,可以直接调用 S2S API。

端点:POST /api/v1/users/{authId}/impersonation/{appId}

  • Authorization:使用带有 root scope 的 S2S token
  • Body:{ "impersonatorToken": "<admin-spa-access-token>" }
  • Response:{ refresh_token, refresh_token_expires_in, refresh_token_expires_on }

步骤:

  1. 使用 Client Credentials 并带 root scope 获取 S2S access token。
  2. 使用该 token 调用上述端点。
  3. 将返回的 refresh_token 通过重定向 URL 参数提供给目标应用。
  4. 应用可使用 refresh token 获取目标用户会话的 access token。

安全注意事项

  • 模拟登录应仅限可信的管理员角色使用。
  • Token 默认短期有效,返回的 refresh token 有效期约 30 分钟。
  • refresh token 内部带有 impersonatedBy 标签以便追踪。
最近更新: 2025/8/11 23:27
Contributors: Baozier