前言
在前文章中介绍了,认证中心以及工程项目介绍。
相关文章
- 统一认证中心简介
- 认证中心-项目工程介绍
本文主要讲解如何部署起来。首先简单的本地部署来-模拟使用认证中心统一认证。
文中附录示例工程源码地址
先上个先行图,登录了认证中心就相当于登录了所有。
下图是先登录认证中心后-跳转到目标系统(也可以直接访问子系统-详见下文)
注意:链接中携带了token
1.环境准备
- 统一认证中心服务( www.myauth.com)
- 子系统1(www.sysclient1.com)
- 子系统2(www.sysclient2.com)
由于是Demo实例,这里若有要访问-需要修改一下本机host,添加如下映射
127.0.0.1 www.myauth.com
127.0.0.1 www.sysclient1.com
127.0.0.1 www.sysclient2.com
注:统一认证中心对接的目标平台可以与其不是在同一个主域名下。这里用本机域名演示一下。
2.认证中心服务
2.1数据库导入
传送门
2.2后台服务
2.2.1源码地址
源码传送门
相关属性:
- 系统编码 auth
- 后台服务启动端口:9901
- vue前台项目启动端口:9528
2.2.2配置修改
修改配置文件 config/目录下配置文件 application-dev.properties
- 配置数据源(以spring.datasource.前缀的相关配置)
- 配置redis (以spring.redis.前缀的相关配置)
- sys.config.ssoLoginUrl 配置认证中心的登录地址,示例 :http://www.myauth.com:9528/login
- 其它以sys.config.为前缀的配置,可选 ,默认的话可不编辑
- 注意:认证中心编码配置 与sso_system表 sys_code 认证中心编码保持一致,sys.config.authSsoSysCode=auth,
- 超级管理员用户(用户ID|用户名),与导入的表数据一致,默认可不修,不建议修改。sys.config.supperAdminUser=1000|admin
配置完成可启动,
Springboot 项目 启动类 com.sso.AuthCenterAdminApplication
打包启动示例
cd sso-auth-center-service#打包
mvn package -DskipTests=true#切换到目录下
cd sso-auth-center-admin/target#执行启动
java -jar sso-auth-center.jar
2.3前台页面
# 进入项目目录
cd sso-auth-center-vue# 安装依赖
npm install# 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
npm install --registry=https://registry.npm.taobao.org# 启动服务
npm run dev
浏览器访问 http://localhost:9528
打包发布
# 构建测试环境
npm run build-test# 构建生产环境
npm run build-prod
2.4默认管理员账号
admin/123456
可登录后在个人中心处修改
2.5打包部署与Nginx配置示例
1.后台服务打包发布
2.前端服务打包
# 构建生产环境
npm run build-prod
打包后会生成dist文件夹,将该文件放置到服务器对应位置
Nginx 配置示例
http {include /usr/local/nginx/conf/mime.types; # 需要改为您的mime.types文件具体位置default_type application/octet-stream;sendfile on; # 开启高效传输模式keepalive_timeout 65; # 保持连接的时间,也叫超时时间,单位秒charset utf-8; # 设置编码格式access_log /var/log/nginx/auth-center.log;server {listen 443 ssl; # 端口号server_name www.xxxxx; # 您的域名ssl_certificate /home/devjava/ssl_certificate/4012616_xxxx.top.pem; #填写你的证书所在的位置ssl_certificate_key /home/devjava/ssl_certificate/4012616_xxx.top.key; #填写你的key所在的位置ssl_session_timeout 5m;ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #协议配置ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; #套件配置ssl_prefer_server_ciphers on;location = / {index index.html;}# 前端项目location / {root /home/devjava/auth-center/sso-auth-center-vue;try_files $uri $uri/ /index.html last;index index.html; add_header Cache-Control "no-cache, no-store";add_header Pragma no-cache;}# 后台服务location /api/ {proxy_pass http://127.0.0.1:9901;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}location ^~ /static/ {root /home/devjava/auth-center/sso-auth-center-vue;expires max;}}
}
3.子系统示例1
3.1源码地址
源码传送门
相关属性:
- 系统编码 sys-client01
- 启动端口:8801
- 验签方式MD5
这里的子系统,没有使用前后分离,使用SpringBoot + templates 搭建的简易工程。
主要实现功能是
- 一个拦截器,拦截所有请求。
- 拦截器内判断是否已经存在局部管缓存,若不存在则请求认证中心认证。
3.2重点配置
#系统编码
sys.config.mySysCode=sys-client01
#MD5签名秘钥(与认证中心-平台详情-添加的秘钥一致)
sys.config.ssoAuthSecret=1234567890#认证中心登录地址
sys.config.ssoAuthLoginUrl=http://www.myauth.com:9528/login
#当前客户端web地址
sys.config.clientWebUrl=http://www.sysclient1.com:8801
#本系统退出登录url
sys.config.myLoginOutUrl=http://www.sysclient1.com:8801/logOutBySsoAuth
#认证中心开放接口地址
sys.config.ssoAuthGetWayUrl=http://localhost:9901/api/open/gateway
3.3核心拦截器
综上,其实就是SSO登录子系统该做的事情。
3.4有图有真相
下图是直接访问子系统1
- 前提未登录认证中心
- 直接输入子系统1地址访问
- 由于未登录-跳转到认证中心登录
- 登录后重定向到了目标系统
认证中心返回的用户信息+菜单权限信息
注:演示项目这里没做特殊处理,就直接以JSON格式展示出来了。
4.子系统示例2
4.1源码地址
源码传送门
相关属性:
- 系统编码 sys-client02
- 启动端口:8802
- 验签方式RSA
与子系统一代码基本一致,只是签名方式不一致,端口不一致,本示例采用的是RSA加签,推荐使用。
4.2有图有真相
由于系统一已经登录,
所以在访问子系统2的时候,无需再次登录。从下图看到,token也是同一个。
5.建议与优化
以下为若需要部署到生成环境建议优化的地方。
5.1关于跳转到子系统链接中携带Token
- 上述Demo中系统的token是第一次认证的时候认证中心返回的在URL拼接了参数,建议子系统存到cookie后,重跳转一次,去掉链接中的token参数,由于上述Demo为了演示方便,所以没有这么做。生产环境建议隐藏。
5.2关于图片存储(有默认图-不影响使用)
由于为了简化开源项目中的组件,将用户头像上传或者系统平台的图标上传,存储到了本地。
- 头像上传接口(com.sso.controller.admin.UserProfileController#avatar)
- 系统图标上传接口(com.sso.controller.admin.SystemController#uploadIcon)
建议改成单独的图片服务,或者第三方例如OSS
关注程序员小强公众号更多编程趣事,知识心得与您分享