Oracle APEX 20.2:主应用免登录访问关联应用并共享用户身份
Oracle APEX 20.2 跨应用单点登录(会话共享)实现步骤
1. 统一跨应用的认证方案基础配置
- 确保主应用和所有关联应用使用相同的认证类型(如数据库账户认证、LDAP认证等),且共享同一用户数据源(比如同一个
USERS表)。 - 编辑主应用的认证方案:找到「会话共享」模块,将「会话共享」设为应用间共享,并设置一个全局会话标识符(比如
GLOBAL_APP_SESSION),所有关联应用必须使用完全相同的标识符。
2. 主应用生成安全跳转链接
不要直接使用普通URL跳转,需通过APEX内置函数生成带会话校验的链接,确保会话信息安全传递:
APEX_UTIL.PREPARE_URL( p_url => 'f?p=' || :关联应用ID || ':1:' || :APP_SESSION || '::NO::P1_CURRENT_USER:' || :APP_USER, p_checksum_type => 'SESSION' )
:关联应用ID替换为目标应用的实际ID;P1_CURRENT_USER是关联应用首页创建的页面项,用来接收当前登录用户。p_checksum_type => 'SESSION'会自动生成校验码,防止链接被篡改。
3. 关联应用的自动登录配置
- 关联应用的认证方案需和主应用保持一致:「会话共享」设为应用间共享,全局会话标识符和主应用相同。
- 在关联应用首页添加页面加载前进程,实现自动登录逻辑:
IF :APP_USER IS NULL AND :P1_CURRENT_USER IS NOT NULL THEN -- 设置当前登录用户 APEX_AUTHENTICATION.SET_USER(:P1_CURRENT_USER); -- 同步会话状态 APEX_UTIL.SET_SESSION_STATE('APP_USER', :P1_CURRENT_USER); END IF;
- 若关联应用使用自定义认证方案,需在会话验证逻辑中增加判断:如果检测到主应用传递的有效会话ID和用户信息,直接通过验证,跳过密码输入步骤。
4. 关键安全注意事项
- 所有应用必须部署在同一域名下,APEX的会话Cookie默认基于当前域,跨域会导致会话无法共享。
- 限制来源应用:可在关联应用的认证方案中添加授权规则,仅允许指定的主应用ID发起跳转请求,避免非法访问。
- 定期清理过期会话:通过APEX内置的会话清理任务,防止无效会话累积。
内容的提问来源于stack exchange,提问作者Sergey
相关产品推荐
相关产品推荐

