小强统一认证中心-部署实例

前言

在前文章中介绍了,认证中心以及工程项目介绍。

相关文章

本文主要讲解如何部署起来。首先简单的本地部署来-模拟使用认证中心统一认证。

文中附录示例工程源码地址

先上个先行图,登录了认证中心就相当于登录了所有。

下图是先登录认证中心后-跳转到目标系统(也可以直接访问子系统-详见下文)
注意:链接中携带了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

关注程序员小强公众号更多编程趣事,知识心得与您分享

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值