NestJS升级node-oidc-provider v6至7.11报interaction session not found错误
panva/node-oidc-provider v6升级v7.11 报
interaction session not found解决方案 问题场景
- NestJS项目中升级
panva/node-oidc-provider依赖,从v6版本迭代到v7.11版本时触发报错 - 已确认Mongo集合中可正常生成interactions记录、会话数据,数据落库逻辑无异常
- 报错堆栈如下:
at resumeAction (/app/iam-authorization-server-microservice/node_modules/oidc-provider/lib/actions/authorization/resume.js:28:11) at runMicrotasks (<anonymous>) at processTicksAndRejections (internal/process/task_queues.js:93:5) at async sessionHandler (/app/iam-authorization-server-microservice/node_modules/oidc-provider/lib/shared/session.js:29:5) at async noCache (/app/iam-authorization-server-microservice/node_modules/oidc-provider/lib/shared/no_cache.js:3:3) at async authorizationErrorHandler (/app/iam-authorization-server-microservice/node_modules/oidc-provider/lib/shared/authorization_error_handler.js:53:7) at async ensureSessionSave (/app/iam-authorization-server-microservice/node_modules/oidc-provider/lib/helpers/initialize_app.js:50:7) at async contextEnsureOidc (/app/iam-authorization-server-microservice/node_modules/oidc-provider/lib/shared/context_ensure_oidc.js:4:5) at async /app/iam-authorization-server-microservice/node_modules/oidc-provider/lib/helpers/initialize_app.js:245:5 at async errorHandler (/app/iam-authorization-server-microservice/node_modules/oidc-provider/lib/shared/error_handler.js:26:7) { allow_redirect: true, error: 'invalid_request', status: 400, statusCode: 400, expose: true, error_description: 'interaction session not found', error_detail: undefined }
根因说明
v7版本相对于v6做了大量不兼容变更,就算数据库中存在对应的interaction记录,只要会话校验链路任意一环不满足v7的规则,就会抛出该错误,常见触发点如下:
- Cookie配置未适配v7规则:v7对interaction绑定的cookie校验逻辑更严格,直接复用v6的cookies配置会导致参数不匹配。重点检查
cookies.short、cookies.long两个配置项的签名密钥、domain、path、sameSite、secure属性,v7版本这部分配置的结构和v6完全不同,必须对照v7的配置规范重新调整。如果前端请求没有携带对应作用域的会话cookie,服务端拿不到cookie里存的interaction uid,就算库里有数据也会判定会话不存在。 - 路由路径被NestJS全局配置修改:v7的resume接口默认会校验请求路径和
interactions.url配置的前缀匹配,如果NestJS配置了全局路由前缀,或者全局中间件改写了请求路径,会导致oidc-provider无法从请求上下文正确匹配到对应的interaction会话。 - 自定义Mongo Adapter返回结构不符合v7规范:v7要求Adapter的
find方法返回的interaction会话对象必须包含uid、params、prompt等必填字段,直接沿用v6时期的Adapter返回逻辑,会出现字段缺失、字段结构不匹配的问题,oidc-provider拿到不符合结构的返回值会直接判定会话不存在。 - Interaction会话TTL配置过短:如果
ttl.Interaction配置的有效期小于用户走完交互流程的耗时,请求到达resume接口时会话已经被判定过期,也会抛出该错误。
排查步骤
- 在resume接口前置中间件打日志,确认请求能否正常拿到oidc-provider写入的interaction会话cookie(默认key为
_interaction,自定义过cookie名则检查对应key),如果拿不到优先排查cookie的域、跨域、sameSite、secure配置。 - 如果能拿到cookie中的uid,手动查询Mongo中对应uid的记录,对比自定义Adapter返回给oidc-provider的对象结构,确认所有必填字段存在、结构和v7规范一致。
- 检查NestJS全局路由前缀、全局拦截器/中间件有没有改写oidc-provider挂载路由的路径,确认交互完成后的回调地址和oidc-provider内部注册的resume接口路径完全匹配。
- 临时调大
ttl.Interaction配置值,排除会话过期导致的报错。
内容的提问来源于stack exchange,提问作者piyush singhal
相关产品推荐
相关产品推荐

