Next.js作为BFF,同Keycloak客户端下游API授权请求及令牌问题
关于Next.js作为BFF调用.NET Core API的认证方案解答
核心结论
不是必须使用JWT令牌才能安全调用同Keycloak客户端下的.NET Core API,你可以直接利用Next.js已有的服务器端Keycloak会话发起请求。
方案一:优化现有JWT令牌方式(解决refresh token过期问题)
- 调整Keycloak客户端配置:将refresh token的过期时间调整至与用户会话有效期匹配,或者保留Keycloak默认的refresh token轮换机制——每次刷新令牌时会获取新的refresh token,以此延长有效时长,直到用户会话真正过期。
- 在Next.js服务器端实现自动刷新逻辑:调用.NET Core API前,先检查访问令牌是否即将过期;若已过期/临近过期,立即用refresh token向Keycloak申请新的访问令牌,再发起API请求。
方案二:直接利用服务器端会话发起请求
这种方式更贴合BFF模式的设计,无需管理JWT生命周期:
- 反向代理转发:让Next.js作为反向代理,将前端请求转发给.NET Core API,同时把Next.js服务器端持有的Keycloak会话凭证(如会话ID、认证票据)传递给API。
- API验证会话有效性:配置.NET Core API信任Next.js的服务器端请求,或者让API调用Keycloak的会话验证接口,校验传递过来的会话信息是否有效。
- 优势:无需处理令牌刷新、过期等问题,所有认证逻辑集中在BFF层,前端无需接触敏感凭证。
两种方案的对比
- JWT方式:适合分布式、跨域的API场景,API可离线验证令牌签名,但需要额外处理令牌生命周期管理。
- 会话传递方式:适合同域或信任环境下的架构,简化认证逻辑,更符合BFF模式的安全隔离原则。
内容的提问来源于stack exchange,提问作者Chase
相关产品推荐
相关产品推荐

