PingFederate中resumePath/resumeUrl作用及自定义IdP适配器开发疑问
PingFederate resumePath/resumeUrl 功能说明及开发实践
一、resumePath/resumeUrl 核心作用
这两个参数是PingFederate认证事务层提供的内置回调入口,本质是绑定了当前未完成认证会话上下文的唯一路径,作用是当IdP Adapter需要中断当前流程跳转到外部服务/自定义页面(比如2FA验证码页、生物识别校验服务)时,能准确回到当前认证事务,恢复之前的上下文状态,不需要开发者自行维护会话ID、事务状态等跨域/跨页面传递的参数,PingFederate会自动完成上下文关联。
注意:resumeUrl是完整的回调域名+路径,resumePath是相对路径,二者功能逻辑完全一致,可根据实际跳转场景选择使用
二、2FA自定义IdP Adapter中resumePath的常规用法
开发适配2FA流程的自定义IdP Adapter时,使用resumePath的标准流程如下:
- 在Adapter的
lookup()方法中,先判断当前会话是否已完成第一因子认证,若已完成且需要触发2FA校验,直接从IdpAdapterContext中获取系统传入的resumePath:String resumePath = context.getParameter(IdpAdapterConstants.RESUME_PATH); - 构造你自己开发的2FA验证码输入页的URL,将resumePath作为回调参数拼接进去,然后给PingFederate返回302跳转响应,跳转到你的2FA页面
- 用户在2FA页面完成验证码输入、校验通过后,让2FA页面直接302重定向回刚才传入的resumePath地址
- PingFederate收到resumePath的请求后,会自动恢复当前认证上下文,再次调用你自定义IdP Adapter的
lookup()方法,你此时就可以读取2FA的校验结果,完成剩余的身份断言逻辑,结束认证流程
注意:resumePath的生命周期和当前认证事务绑定,事务一旦提交(认证成功/失败)就会立即失效,无法重复使用。
三、单次事务多次调用同一个IdP Adapter的实现方案
可行性说明
可以用resumePath实现该需求,核心逻辑是通过自定义阶段标记区分同个Adapter的不同执行轮次,借助resumePath的上下文恢复能力重复触发Adapter执行。
具体操作步骤
- 提前定义好本次认证需要的多个执行阶段标记,比如
STEP1_FIRST_FACTOR、STEP2_2FA_CHECK、STEP3_DEVICE_TRUST等 - 每次进入Adapter的
lookup()方法时,首先从IdpAdapterContext的会话存储(比如context.getAuthnState())中读取当前的执行阶段标记,默认是第一个阶段 - 完成当前阶段的逻辑后,将下一个阶段的标记存入会话存储,然后直接构造重定向到当前resumePath的响应返回
- PingFederate收到resumePath的请求后,会再次调用该IdP Adapter的
lookup()方法,你读取到新的阶段标记后执行对应阶段的逻辑即可,以此类推完成所有阶段的校验 - 所有阶段执行完成后,返回认证成功的响应,结束当前事务即可
内容的提问来源于stack exchange,提问作者Khushbu Choudhary
相关产品推荐
相关产品推荐

