这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战
这次课程主要是实践,这里记录一下搭建auth-center的过程
准备:生成密钥证书
第1步:生成密钥证书
下面的命令生成密钥证书,采用RSA算法,每个证书包含公钥和私钥
1 | shell复制代码-- 创建一个文件夹,在该文件夹下执行如下命令 |
生成证书文件kaikeba.jks,搭建授权服务器时用
第2步:证书管理
1 | shell复制代码-- 查询证书信息 |
第3步:导出公钥
1 | shell复制代码keytool -list -rfc --keystore kaikeba.jks | openssl x509 -inform pem -pubkey |
将公钥保存到public.key文件,搭建资源服务器时用
搭建授权中心
第1步:创建授权中心模块
t31-auth-center
第2步:添加依赖
pom.xml
1 | xml复制代码<?xml version="1.0" encoding="UTF-8"?> |
第3步:配置
application.yml
1 | yaml复制代码spring: |
bootstrap.yml
1 | yaml复制代码spring: |
生成的密钥证书放到resources下
第4步:启动器
AuthApplication.java
1 | java复制代码package com.kaikeba.t31.auth; |
第5步:OAuth2配置
1 | java复制代码package com.kaikeba.t31.auth.config; |
第6步:Spring Security配置
1 | java复制代码package com.kaikeba.t31.auth.config; |
第7步:UserDetailService
UserDetailService作用是从数据库中读取rbac数据,用户、密码、角色数据返回UserDetails,交给Spring Security框架匹配验证,颁发令牌等操作
1 | java复制代码package com.kaikeba.t31.auth.service.impl; |
读取数据的UserFeign如下
1 | java复制代码package com.kaikeba.t31.auth.client; |
搭建资源中心
t31-admin-service服务
第0步:配置
先前public.key复制到resources下
第1步:Jwt配置
1 | java复制代码package com.kaikeba.t31.admin.config; |
第2步:资源服务器配置
1 | java复制代码package com.kaikeba.t31.admin.config; |
第3步:security.yml
所有资源中心都要配置oauth/token_key,用来验证公钥,启动时验证
resources/security.yml
1 | yaml复制代码security: |
第4步:权限控制说明
Spring Security中定义了四个支持权限控制的表达式注解,分别是
- @PreAuthorize
- @PostAuthorize
- @PreFilter
- @PostFilter
其中前两者可以用来在方法调用前或者调用后进行权限检查,后两者可以用来对集合类型的参数或者返回值进行过滤.在需要控制权限的方法上, 我们可以添加@PreAuthorize注解,用于方法执行前进行权限检查,校验用户当前角色是否能访问该方法.
1 开启EnableGlobalMethodSecurity
使用上述注解控制权限需要设置EnableGlobalMethodSecurity —–见第2步资源服务器配置
2 如何使用注解
1 | java复制代码package com.kaikeba.t31.admin.controller; |
3 控制权限的方式—全局代码控制
4 控制权限的方式—注解控制
本文转载自: 掘金