1.介绍

在Spring Cloud需要使用OAUTH2来实现多个微服务的统一认证授权,通过向OAUTH服务发送某个类型的grant type进行集中认证和授权,从而获得access_token,而这个token是受其他微服务信任的,我们在后续的访问可以通过access_token来进行,从而实现了微服务的统一认证授权

OAuth 2.0定义了四种授权方式。

密码模式(resource owner password credentials)

授权码模式(authorization code)

简化模式(implicit)

客户端模式(client credentials)

密码模式(resource owner password credentials)这种模式是最不推荐的,因为client可能存了用户密码 这种模式主要用来做遗留项目升级为oauth2的适配方案 当然如果client是自家的应用,也是可以

支持refresh token

授权码模式(authorization code)这种模式算是正宗的oauth2的授权模式设计了auth code,通过这个code再获取token支持refresh token

简化模式(implicit)这种模式比授权码模式少了code环节,回调url直接携带token这种模式的使用场景是基于浏览器的应用这种模式基于安全性考虑,建议把token时效设置短一些不支持refresh token

客户端模式(client credentials)这种模式直接根据client的id和密钥即可获取token,无需用户参与这种模式比较合适消费api的后端服务,比如拉取一组用户信息等不支持refresh token,主要是没有必要 refresh token的初衷主要是为了用户体验不想用户重复输入账号密码来换取新token,因而设计了refresh token用于换取新token

这种模式由于没有用户参与,而且也不需要用户账号密码,仅仅根据自己的id和密钥就可以换取新token,因而没必要refresh token

代码模块展示

SSO 设计分为服务端和客户端2个部分,sso服务端为每个应用提供了统一的访问控制和授权认证服务,在模块merchant-sso中进行开发和包含用户登陆设计 主页设计 认证服务设计等

merchant-sso 服务端 配置

pom.xml的配置

server:

port: 8000

session:

cookie:

name: SESSIONID

eureka:

client:

serviceUrl:

defaultZone: http://localhost:8761/eureka/

encrypt:

failOnError: false

spring:

datasource:

type: com.alibaba.druid.pool.DruidDataSource

driver-class-name: com.mysql.jdbc.Driver

url: jdbc:mysql://localhost:3306/myzipkin?characterEncoding=utf8&useSSL=false

username: myzipkin

password: myzipkin

# 初始化大小,最小,最大

initialSize: 5

minIdle: 5

maxActive: 20

# 配置获取连接等待超时的时间

maxWait: 60000

# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒

timeBetweenEvictionRunsMillis: 60000

# 配置一个连接在池中最小生存的时间,单位是毫秒

minEvictableIdleTimeMillis: 300000

validationQuery: SELECT 1 FROM DUAL

testWhileIdle: true

testOnBorrow: false

testOnReturn: false

# 打开PSCache,并且指定每个连接上PSCache的大小

poolPreparedStatements: true

maxPoolPreparedStatementPerConnectionSize: 20

#配置监控统计拦截的filters,去掉后监控界面sql将无法统计,'wall'用于防火墙

filters: stat,wall,log4j

# 通过connectProperties属性来打开mergeSql功能;慢SQL记录

connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

# 合并多个DruidDataSource的监控数据

#useGlobalDataSourceStat=true

jpa:

database: MYSQL

show-sql: false

## Hibernate ddl auto (validate|create|create-drop|update)

hibernate:

ddl-auto: none

naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy

properties:

hibernate:

dialect: org.hibernate.dialect.MySQL5Dialect

--- ##FeignClient超时设置

spring.cloud.loadbalancer.retry.enabled: true

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds:10000

ribbon.ConnectTimeout: 250 ribbon.ReadTimeout: 1000

ribbon.OkToRetryOnAllOperations: true

ribbon.MaxAutoRetriesNextServer: 2 ribbon.MaxAutoRetries: 1

bootstrap.yml的配置

启动类

@SpringBootApplication

@EnableDiscoveryClient

@EnableZuulProxy

@EnableHystrix

@EnableFeignClients(basePackages = “com.demo”)

@ComponentScan(basePackages = “com.demo”)

public class MerchantSsoApplication {

public static void main(String[] args) {

SpringApplication.run(MerchantSsoApplication.class, args);

}

}

认证中心 主要类

@Configuration

@EnableAuthorizationServer

public class OAuthConfigurer extends AuthorizationServerConfigurerAdapter {

@Bean

public JwtAccessTokenConverter jwtAccessTokenConverter() {

JwtAccessTokenConverter converter = new JwtAccessTokenConverter();

//非对称加密

KeyPair keyPair = new KeyStoreKeyFactory(new ClassPathResource(

"keystore.jks"), "tc123456".toCharArray()).getKeyPair("tycoonclient");

//对称加密

// converter.setSigningKey("123");

converter.setKeyPair(keyPair);

return converter;

}

@Override

public void configure(ClientDetailsServiceConfigurer clients)

throws Exception {

clients.inMemory().withClient("ssoclient").secret("ssosecret")

.autoApprove(true)

.authorizedGrantTypes("authorization_code

gateway oauth2 对称加密_SpringCloud(六) oauth2认证中心(单点登陆)相关推荐

  1. gateway oauth2 对称加密_深入理解Spring Cloud Security OAuth2及JWT

    因项目需要,需要和三方的oauth2服务器进行集成.网上关于spring cloud security oauth2的相关资料,一般都是讲如何配置,而能把这块原理讲透彻的比较少,这边自己做一下总结和整 ...

  2. 六、微服务版的单点登陆系统设计及实现

    文章目录 1.简介 1.1 背景分析 1.2 单点登陆系统 2.快速入门实践 2.1 工程结构如下 2.2 创建认证授权工程 2.3 添加项目依赖 2.4 构建项目配置文件 2.5 添加项目启动类 2 ...

  3. 加密与授权 Oauth2.0

    加密算法 对称加密 加密和解密使用同样规则(简称"密钥",这被称为"对称加密算法" 缺点:密钥的传递和保存变得尤为重要,一旦密钥丢失,则出现数据安全问题.然而加 ...

  4. 对称密钥加密算法 对称轮数_选择Java加密算法第2部分–单密钥对称加密

    对称密钥加密算法 对称轮数 抽象 这是涵盖Java加密算法的三部分博客系列的第2部分. 该系列涵盖如何实现以下功能: 使用SHA–512散列 AES–256 RSA–4096 这第二篇文章详细介绍了如 ...

  5. 选择Java加密算法第2部分–单密钥对称加密

    抽象 这是涵盖Java加密算法的三部分博客系列的第2部分. 本系列介绍如何实现以下目标: 使用SHA–512散列 AES–256 RSA–4096 这第二篇文章详细介绍了如何实现单密钥对称AES-25 ...

  6. Spring Security、oauth2、单点登陆SSO的关系

    文章目录 概述 1. 什么是Spring Security 1.1 配置示例 1.2 spring security 基本原理 1.2 Spring Security存在的问题 2. 什么是oauth ...

  7. 【上】安全HTTPS-全面详解对称加密,非对称加密,数字签名,数字证书和HTTPS

    此文章转载来源于http://blog.csdn.net/tenfyguo/article/details/40922813点击打开链接 一,对称加密 所谓对称加密,就是它们在编码时使用的密钥e和解码 ...

  8. 对称加密与非对称加密的区别_https原理及对称加密、非对称加密、数字证书、数字签名的含义...

    一.为什么要使用https 使用https的原因其实很简单,就是因为http的不安全. 当我们往服务器发送比较隐私的数据(比如说你的银行卡,身份证)时,如果使用http进行通信.那么安全性将得不到保障 ...

  9. 浅谈对称加密与非对称加密

    在数字加密算法中,通过可划分为对称加密和非对称加密. 一:什么是对称加密? 在对称加密算法中,加密和解密使用的是同一把钥匙,即:使用相同的密匙对同一密码进行加密和解密: 加密过程如下: 加密:原文 + ...

最新文章

  1. Python入门100题 | 第078题
  2. 1008 Elevator (20 分)【难度: 简单 / 知识点: 模拟】
  3. [计算机组成原理] Booth算法 —— 补码一位乘法
  4. 谈谈神经网络的大规模训练优化
  5. 在Java中使用Collat​​or和String类进行字符串比较
  6. SmartCommit让复合提交不在是难题
  7. Linux下python执行Killed
  8. c语言编程n元一次方程,解n元一次方程
  9. KK录像机怎么用?KK录像机使用方法介绍
  10. 【系统分析师之路】第十九章 复盘知识产权标准化
  11. Revit二次开发——链接模型坐标系与模型坐标系转换
  12. java中台阶问题_编程:跳台阶问题
  13. Android Recovery OTA升级(一)—— make otapackage
  14. 鬼故事之中学异事(01)
  15. 为什么子进程要继承处理器亲缘性?
  16. 打印系统开发(27)——WinForm开发(49)——c# winform 打印图像,PrintDialog打印并且设置打印纸张大小
  17. 上海控安入选首批工控安全防护能力贯标咨询机构名单
  18. gst-inspect-1.0汇总自用
  19. OA协同办公系统的发展趋势
  20. MOD、SCON、PCON寄存器的配置

热门文章

  1. linux pprof工具安装,google perftools工具介绍
  2. spring cloud全家桶_阿里架构师玩转spring全家桶(实战篇),附赠3本spring电子书...
  3. fsimage文件丢失_hadoop fsimage edits关系
  4. 拼接路径优雅方式_章泽天“学生装”穿出高级感,缎面衬衫配小香风裙,温柔又优雅...
  5. iphone闪退修复工具_苹果中国回应iPhone致命漏洞:不予置评
  6. mysql 员工工资上涨5%_工资从1万到3万,你还差mysql数据库优化之系列五
  7. 为什么能通过域成员主机拿下域控服务器的密码呢
  8. gin redis 链接不上_内存优化,Redis是如何实现的!
  9. mysql jdbc批量更新_jdbc批量更新数据
  10. 用栈实现队列与用队列实现栈