NestJS搭建SSO服务时外部URL重定向不生效问题
NestJS搭建SSO服务外部URL重定向失效问题
使用NestJS搭建SSO单点登录服务,为前端应用及API提供身份认证能力时,遇到重定向到外部URL失效的问题。
认证流程设计
- 外部前端携带回调重定向地址跳转至SSO服务发起认证请求
- SSO服务将请求重定向至登录页面
- 用户提交个人账号凭证完成登录操作
- SSO服务校验用户身份合法后,使用前端传入的重定向地址,携带JWT凭证与用户信息完成最终跳转
现有登录接口实现
Auth控制器中编写的登录接口处理逻辑如下:
@Post('auth/login') async login(@Body() body, @Res() res: Response) { const authResponse = await this.authService.login(body.user, body.password); if (authResponse.error) { return res.render('login', { title: '', redirect: body.redirect, errors: [{ msg: authResponse.error }], }); } else { res.redirect(`${body.redirect}?token=${authResponse.token}`); } }
问题现象
当用户身份校验通过执行重定向逻辑时,NestJS服务日志无任何相关输出,页面也未发生跳转。已测试的重定向目标URL包括http://google.cl、http://localhost:4200。
已尝试排查方案(均未解决问题)
- 在
redirect方法中指定200 HTTP状态码,执行后页面跳转至空白页,仅显示OK, redirecting to URL提示 - 使用框架提供的
@Redirect()装饰器实现重定向,效果与之前一致 - 重定向至SSO服务自身的其他接口可正常生效,仅外部URL跳转存在异常
- 在
res.redirect调用前添加return关键字返回执行结果,仍无效果
补充排查记录
- 先重定向至服务内部接口,再由该内部接口执行外部URL跳转
- 重定向时尝试使用301、302、304、200等不同HTTP状态码
当前服务CORS配置
app.enableCors({ origin: '*', methods: 'GET,HEAD,PUT,PATCH,POST,DELETE', });
求助:是否有开发者遇到过同类问题,可提供解决思路?
内容的提问来源于stack exchange,提问作者YoshyPamp
相关产品推荐
相关产品推荐

