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

如何在同一OAuth/OpenID Connect应用实例中实现双用户授权审批?

同一应用实例下多用户审批的OIDC/OAuth2流程设计

一、前置准备

  • 应用必须支持多会话隔离:要在同一浏览器里同时存收银员和经理的会话,得用区分开的存储方式——比如给经理的会话Cookie加专属前缀,或者前端用独立的内存容器存会话数据,绝对不能让两个用户的会话互相干扰。
  • 对接的OIDC/OAuth2身份服务得允许同一设备多用户认证:支持在不同窗口里生成独立的用户令牌,或者能强制触发新的登录流程,不会复用已有会话。

二、收银员发起审批请求

  1. 收银员登录后发起改价操作,前端判断该操作需要授权,生成一个唯一审批请求ID,把改价的关键信息(商品ID、原价格、新价格、操作时间)存到后端临时存储(比如Redis,设15分钟过期)。
  2. 前端打开新弹窗,指向应用的审批入口页面,把审批请求ID作为查询参数带过去(比如/approve?reqId=abc123)。

三、弹窗内的经理认证流程

  1. 审批页面加载后,先检查弹窗里有没有有效的经理会话:
    • 没有的话直接触发OIDC授权码流(弹窗模式):调用身份提供商的授权端点,指定prompt=login强制要求登录(防止复用收银员的会话),用response_mode=query返回授权码。
    • 身份服务完成经理的登录验证后,回调应用的授权页面,用授权码交换经理的ID Token和Access Token,把这些令牌存在弹窗专属的会话里(比如标记为manager_session的Cookie)。
  2. 认证通过后,页面用审批请求ID从后端拉取改价详情,展示给经理(包括操作人是谁、改了什么价格),同时显示“批准”“拒绝”按钮。

四、审批操作与结果同步

  1. 经理点完按钮后,前端带着经理的Access Token和审批结果,调用后端的审批确认接口。
  2. 后端先验证经理的Access Token(检查角色是不是经理、令牌有没有过期),再校验审批请求ID的合法性(没过期、没被处理过),然后更新改价操作的状态,同时记录审批日志(经理ID、时间、结果)。
  3. 后端处理完给前端返回结果,弹窗用postMessage API把结果通知给主窗口(收银员的会话)。
  4. 主窗口收到通知后,刷新页面或者更新改价状态,弹窗自动关闭,流程结束。

五、安全与清理措施

  • 审批完成后,弹窗里的经理会话可以选保留(方便后续快速审批)或者直接销毁,保留的话一定要设短过期时间。
  • 后端的临时审批数据处理完立刻删除,避免被重复调用。
  • 所有关键操作都要做权限校验:收银员只能发起请求,经理只能处理自己权限内的审批。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 01:12:07