You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Duende IdentityServer安全用户模拟方案咨询与可行性验证

客服模拟客户功能的安全实现方案咨询(基于Duende IdentityServer)

背景

基于Duende IdentityServer保护的ASP.NET Core Razor Pages应用与Web API,需实现仅在客户授权后方可进行的客服模拟客户功能,流程为:客户在个人设置中开启“授予模拟权限”(有效期最长7天,可随时撤销),客服可在后台登录授权客户账号。所有操作需留痕,无法采用非常规手段。

现有思路的验证与实操建议

思路1:基于Token Exchange生成长期访问令牌存储

  • 方案逻辑:客户授权时,利用Token Exchange机制生成有效期7天的访问令牌,存储到IdentityServer数据库,供客服通过接口获取。
  • 风险与实操建议:
    • 长期令牌存储确实存在泄露风险,可通过以下方式降低风险:
      • 令牌存储时做加密处理,仅保留关联客户ID、授权时间、有效期等元数据,不存储明文完整令牌;
      • 实现令牌主动撤销机制,客户取消授权时立即标记对应令牌失效;
      • 定时清理过期令牌,避免无效数据堆积;
      • 给客服获取令牌的接口添加严格权限校验,仅允许指定客服角色访问,且所有操作需留痕(记录操作人、时间、目标客户)。

思路2:自定义同意页切换客户身份

  • 核心疑问:IdentityServer是否有扩展点可控制登录流程切换为客户身份?
  • 实操方案:
    • IdentityServer提供了自定义登录页、同意页扩展点,同时可通过IProfileService和IEventsService扩展身份逻辑:
      • 客服登录后,后台系统触发模拟请求,跳转到自定义的“模拟账号选择页”(此页面需先校验客服权限);
      • 选择已授权的客户账号后,调用IdentityServer登录端点,通过自定义登录逻辑(如绕过密码验证,直接基于客户ID和有效授权状态创建身份凭证)生成客户身份的Claims;
      • 借助IEventsService记录完整模拟链路:原操作者(客服ID)、目标客户ID、操作时间、授权状态;
      • 完成身份切换后,正常走授权流程,颁发客户身份的访问令牌和ID令牌给客户端。
    • 关键前提:必须严格校验客户是否已授予模拟权限且权限处于有效期内,否则拒绝身份切换。

思路3:社区模拟流程的步骤4-6实操细节

社区提出的模拟流程为:登录客户端→检查权限→选择模拟账号→以选中账号登录(记录原操作者)→重定向至授权端点→颁发令牌并返回客户端。针对步骤4-6的具体实操:

  1. 以选中账号登录(记录原操作者):
    • 客服选择目标客户后,创建包含原操作者Claims(如OriginalUserId、OriginalRole)和客户身份Claims的身份凭证;
    • 使用SignInManager或自定义登录逻辑持久化该身份凭证(如Cookie),同时通过IEventsService记录模拟事件;
    • 必须校验客户的模拟授权状态,确保权限有效。
  2. 重定向至授权端点:
    • 构造包含客户端ID、重定向URI、scope等必要参数的授权请求URL,可添加自定义参数(如is_simulation=true)标记模拟请求;
    • 重定向到IdentityServer的授权端点,此时IdentityServer会识别已登录的客户身份,进入授权流程。
  3. 颁发令牌并返回客户端:
    • 在IProfileService中,可根据is_simulation参数在令牌中添加模拟相关Claims(如SimulatedBy),方便业务系统识别模拟身份;
    • 完成授权流程,将令牌返回客户端,同时记录令牌颁发的事件日志。

内容的提问来源于stack exchange,提问作者Pete

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 05:05:19