计算机系统应用教程网站

网站首页 > 技术文章 正文

OAuth2.0认证Nginx反向代理解决方案

btikc 2024-09-18 08:40:26 技术文章 32 ℃ 0 评论

问题描述

一个前后端分离的运营管理平台,前端基于Vue3.0开发,后端基于SpringBoot+OAuth2.0实现,在开发环境一切正常,部署上线后,用Nginx发布静态前端,并反向代理后端服务,发现能够正常获取到token信息,确无法获取用户信息,登录失败,卡死.....

经排查发现前端项目先获取access_token,一切正常,但通过access_token获取用户信息时就无法获取到了。





问题原因

当我们用nginx 作为反向代理服务器,导致了 Spring 认证代码中,无法正确获取服务正确的IP和端口地址,也就是说调用地址和认证地址不一致了,跳转的是request的FullRequestUrl,最后导致了 redirectUri 无法正确匹配从而认证失败。比如用Nginx代理后地址是192.168.1.5/serveradmin,而服务原地址是192.168.1.8:8019/admin,这样的话IP地址、端口、scheme都不一致,redirectUri的是192.168.1.5/serveradmin,请求不到真正的服务,因此无法认证。



解决思路

将nginxtomcat 进行设置,将host、scheme等信息设置一致,可以用swaggerUI开放出认证测试,用代理出来的地址和原地址都能在swaggerUI中访问就可以了。

1、springboot项目配置

remote-ip-header: "X-Forwarded-For"

protocol-header: "X-Forwarded-Proto"

protocol-header-https-value: "https" //这个可以是http,如果是https的话在nginx对应ssl只能用https访问,http可以对应80用http访问

2、nginx配置

proxy_set_header X-Forwarded-Host $host;

proxy_set_header X-Forwarded-Server $host;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header Host $host:$server_port;

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表