跨站点统一登录需求:实现项目站超级管理员跳转主站的权限适配
统一同域多站点登录与权限映射解决方案
Alright, let's break this down clearly. Since both your main site and project sub-site live under the same root domain (www.example.com), we can use this to our advantage for seamless login sync, while fixing the conflicting idnumber permission definitions between the two sites.
1. 利用同域Cookie实现统一登录态
因为两个站点共享同一根域名,设置根路径(/)的Cookie会在www.example.com和www.example.com/project之间互通,这省去了复杂的跨域认证配置:
- 统一会话存储:用户在任意站点登录时,设置一个域名级别的Cookie,包含安全的唯一用户标识(比如
user_id)和会话过期信息。Cookie配置需包含:Domain=.example.com(确保所有子域名/路径都能访问)Path=/(覆盖整个域名范围)HttpOnly+Secure(HTTPS站点适用) +SameSite=Strict,防范XSS和CSRF风险
- 同步登录校验:两个站点都通过读取这个共享Cookie判断用户是否登录,不再维护独立的会话存储。切换站点时无需重复登录。
2. 解决idnumber权限映射冲突
核心问题是idnumber='3'在两个站点的含义完全不同,我们需要添加一层映射,将原始idnumber值转换为站点专属角色:
- 保留数据源一致性:不要修改数据库中存储的原始
idnumber,而是为每个站点编写专属的权限转换函数,将原始值映射为对应平台的角色。 - 后端映射函数示例:
项目站点(idnumber='3'=超级管理员):
主站点(// 项目站后端 - 角色映射 function getProjectUserRole(idnumber) { switch(idnumber) { case '3': return 'super_admin'; // 按需添加其他角色映射 default: return 'regular_user'; } }idnumber='3'=访客):// 主站后端 - 角色映射 function getMainSiteUserRole(idnumber) { switch(idnumber) { case '3': return 'visitor'; // 按需添加其他角色映射 default: return 'registered_user'; } } - 前端同步逻辑:如果前端需要基于角色渲染UI,可以在客户端复制这套映射逻辑,或者通过API调用后端,利用Cookie中的
user_id获取转换后的角色。
3. 调整「上传」按钮跳转流程
针对项目站超级管理员控制台的「上传」按钮:
- 点击后直接跳转至主站目标页面(比如
www.example.com/upload)即可。 - 主站会自动检测共享登录Cookie,从数据库获取用户的
idnumber,应用自身的角色映射规则,按照访客权限渲染对应页面。
4. 统一登出逻辑
确保在任意站点登出时,都会清除共享Cookie,实现两个站点同步登出。可以实现一个集中式登出接口(比如www.example.com/logout),失效会话Cookie后跳转至指定页面。
关键安全提醒
- 不要在Cookie中存储敏感角色数据,仅保存非敏感的用户标识(如
user_id),从后端数据库获取原始idnumber并计算角色。 - 如果需要长期登录,使用短生命周期的会话Cookie搭配刷新令牌,降低Cookie泄露后的风险。
内容的提问来源于stack exchange,提问作者suresh
相关产品推荐
相关产品推荐

