最近作项目,遇到单点登陆,方法是在前端作nginx代理。
应用系统须要配合作以下调整:
一、使用“*.顶级域名”访问,确保能够和KAM共享cookie
二、对来自Nginx代理的访问放开登陆认证(安全起见,对来自其余IP的访问应该禁止)
三、应用系统从请求头kam_remote_user中读取登陆用户(Nginx会将登陆用户写入请求头)
四、若是应用系统须要KAM的全局惟一token,能够从cookie中读取kam_sso_token的值html
刚开始调试的时候是在正式环境,每次修改完代码须要从新构建才能看到效果,
实在繁琐,还产生了一堆没必要要的commit 历史。调通以后开始思考如何在本地开发环境调试单点登陆这一功能。
不辱使命,研究出来了,如下是步骤。前端
location / { root /usr/share/nginx/html; auth_request /kam_auth; error_page 401 = @error401; auth_request_set $kam_remote_url $upstream_http_kam_remote_url; proxy_set_header kam_remote_user $upstream_http_kam_remote_user; } location /kam_auth { internal; proxy_set_header kam_remote_url "$scheme://$http_host$request_uri"; proxy_set_header Host $host; proxy_pass_request_body off; proxy_set_header Content-Length ""; proxy_pass 单点登陆页面网址/auth; } location @error401 { add_header Set-Cookie "NSREDIRECT=$kam_remote_url;Path=/;Domain=顶级域名"; return 302 单点登陆页面网址; }
配置完后发布到正式环境,单点登陆功能已可用webpack
继续配置,咱们的目标是 dev 环境也能单点登陆!nginx
修改hosts文件 C:WindowsSystem32driversetc
加入 127.0.0.1 dev.testgroup.comweb
以后,把原来的dev运行地址 http://localhost:8080 换成 http://dev.testgroup.com:8080
发现报错 Invalid Host header
解决方法:在webpack.dev.conf.js devServer对象中添加:disableHostCheck: truejson
devServer: { ... disableHostCheck: true },
从新 run dev 后发现能够访问了浏览器
nginx官网上下载相应的安装包
下载进行解压,将解压后的文件放到本身心仪的目录下。window的cmd窗口,进入到nginx目录,
使用 start nginx.exe
进行nginx的安装,以下图所示安全
安装成功,后在浏览器地址栏输入:127.0.0.1,会看到以下图所示的nginx欢迎界面cookie
若是看不到,那么说明你安装失败,你能够到你的 nginx 目录下的logs文件夹下的error下查看,
若是发现里面写着:ui
说明你的80端口被占用了,或是cmd命令进入dos下执行:netstat -aon | findstr :80 查看80端口是否被占用,若是占用,那么你须要修改注册表,以下步骤:
一、打开注册表:regedit
二、找到:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesHTTP
三、找到一个REG_DWORD类型的项Start,将其改成0
四、重启系统,System进程不会占用80端口
此时此刻,你能够再次执行 相应的命令:start nginx.exe 命令了。
nginx相关命令:start nginx.exe
nginx.exe -s stop
//中止nginxnginx.exe -s reload
//从新加载nginxnginx.exe -s quit
//退出nginx
由于咱们已经配置了虚拟域名,因此在浏览器地址栏输入 http://dev.testgroup.com 也是一样的 nginx welcome 页面
修改 nginx 目录下的 conf/nginx.conf 文件
location / { root html; index index.html index.htm; auth_request /kam_auth; error_page 401 = @error401; auth_request_set $kam_remote_url $upstream_http_kam_remote_url; proxy_set_header kam_remote_user $upstream_http_kam_remote_user; proxy_pass http://dev.testgroup.com:8080; } location /kam_auth { internal; proxy_set_header kam_remote_url "$scheme://$http_host$request_uri"; proxy_set_header Host $host; proxy_pass_request_body off; proxy_set_header Content-Length ""; proxy_pass 单点登陆页面网址/auth; } location @error401 { add_header Set-Cookie "NSREDIRECT=$kam_remote_url;Path=/;Domain=顶级域名"; return 302 单点登陆页面网址; }
如今,在浏览器地址栏输入 http://dev.testgroup.com 发现自动跳转到了单点登陆页面,登陆后返回到了咱们以前的dev.testgroup.com页面