springcloud玩转单点登录【oauth】
随着公司项目的庞大,单点登录变得尤为重要,那么怎么实现单点登录,下面已oauth为标准实现单点登录。
【特别鸣谢:魔乐科技,附上官网:www.mldn.cn】
1:项目组织结构
本项目为oAuth修改的启动项目结构,在该结构之中基本定义模块如下:
1、microauth:定义公共的父pom文件,用于所有相关依赖包配置;
2、microauth-api:定义公共Service接口,同时在该接口上还提供有相应的Fallback配置、Feign配置注解、VO类定义;
3、microauth-eureka-server:Eurea注册与发现服务,所有微服务都注册到此处,该服务端口为7001;
4、microauth-provider-dept-8001:定义部门服务信息,该服务使用mldn8001数据库,同时提供有配置脚本,在本服务之中将主要结合MyBatis进行数据库操作,该微服务使用的是8001端口;
5、microauth-zuul-gateway-9501:zuul网关服务接口,运行在9501端口;
6、microauth-consumer:消费端微服务,主要通过zuul调用dept微服务;
所有的服务均没有配置Spring-Security开发包,只提供一个基本访问处理流程。
修改hosts文件,本次使用到的主机名称如下:
127.0.0.1 dept-8001.com
127.0.0.1 eureka-7001.com
127.0.0.1 gateway-9501.com
127.0.0.1 oauth-8080.com
127.0.0.1 consumer.com
项目的组织结构如下图,图中的oauth认证中心就是我们说的单点登录服务器,提供认证、授权保存服务;
下面要演示的就是怎么通过web客户端【springboot】访问我们的微服务,这里就是如图的部门微服务;
服务提供者暴露的接口如果是裸露的这是多么可怕的事情,所以我们要做的就很简单,怎么去访问我们这个受保护的服务;
现在的系统大都要求支持三高:高并发、高可用、高性能
所以,服务不做集群是不行的,集群你得有多个服务节点不是,你项目当中会有多少个微服务,你每一个微服务都要有多个节点的话,那我客户端怎么访问你哦?
注册中心帮我们解决了这一个难题,把你所有的服务都放到一个中心的位置去,我服务的调用者只关心你这个注册中心就可以了,此图为简要说明,先画了一个注册中心,
按理,注册中心也得集群处理。此图先不说明。
有的注册中心还不行,还是不能实现负载均衡呀,所以feign就出来了,feign是个啥玩意,它就是转门搞负载均衡的,让你的远程调用就像是本地的接口调用一样。
有的feign还不够,你还得来一层代理网关,帮你代理转发,那个东西就叫zuul。

2:目录结构

3:演示
a:启动注册中心,将部门微服务、和代理网关注册到注册中心当中

b:此时访问部门微服务是访问不了,因为加了安全认证

c:启动CAS单点登录服务器并访问
http://mermaid:hello@oauth-server.com:8080/oauth/authorize?client_id=cmldn&response_type=code&redirect_uri=http://www.baidu.com

d:使用curl 获取access_token
curl -X POST -H "Content-Type:application/x-www-form-urlencoded" -d "grant_type=authorization_code&code=cKXoVK&redirect_uri=http://www.baidu.com" "http://cmldn:cjava@oauth-server.com:8080/oauth/token"

e:拿到access_token就可以访问我们受保护的资源了


f:访问zuul代理网关需要登录

输入用户和密码就可以登录了

g:通过客户端【springboot】访问


springcloud玩转单点登录【oauth】的更多相关文章
- SpringCloud系列——SSO 单点登录
前言 作为分布式项目,单点登录是必不可少的,文本基于之前的的博客(猛戳:SpringCloud系列——Zuul 动态路由,SpringBoot系列——Redis)记录Zuul配合Redis实现一个简单 ...
- 单点登录 - OAuth 2.0 授权码模式(一)
OAuth 2.0定义了四种授权方式 授权码模式(authorization code) 简化模式(implicit) 密码模式(resource owner password credentials ...
- SpringCloud微服务实战——搭建企业级开发框架(四十):使用Spring Security OAuth2实现单点登录(SSO)系统
一.单点登录SSO介绍 目前每家企业或者平台都存在不止一套系统,由于历史原因每套系统采购于不同厂商,所以系统间都是相互独立的,都有自己的用户鉴权认证体系,当用户进行登录系统时,不得不记住每套系统的 ...
- Spring Security构建Rest服务-1300-Spring Security OAuth开发APP认证框架之JWT实现单点登录
基于JWT实现SSO 在淘宝( https://www.taobao.com )上点击登录,已经跳到了 https://login.taobao.com,这是又一个服务器.只要在淘宝登录了,就能直接访 ...
- springcloud微服务基于redis集群的单点登录
springcloud微服务基于redis集群的单点登录 yls 2019-9-23 简介 本文介绍微服务架构中如何实现单点登录功能 创建三个服务: 操作redis集群的服务,用于多个服务之间共享数据 ...
- Casdoor + OAuth 实现单点登录 SSO
简介 Casdoor 是一个基于 OAuth 2.0 / OIDC 的中心化的单点登录(SSO)身份验证平台,简单来说,就是 Casdoor 可以帮你解决用户管理的难题,你无需开发用户登录.注册等与用 ...
- spring cloud单点登录
概述 基于springcloud的单点登录服务及基于zuul的网关服务(解决了通过zuul转发到认证服务之后session丢失问题) 详细 代码下载:http://www.demodashi.com/ ...
- SpringBootSecurity学习(26)前后端分离版之github单点登录
单点登录(SSO) 关于oauth2.0,最后我们再来学习一下单点登录.前面介绍过单点登录的定义,单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一. ...
- 使用公钥私钥加密实现单点登录(SSO)
Oauth2+Gateway+springcloud+springcloud-alibaba-nacos+jwt ,使用公钥私钥加密实现单点登录(OSS) github地址点这里 注意事项 GET: ...
随机推荐
- 2019-10-21-WPF-多个-StylusPlugIn-的事件触发顺序
title author date CreateTime categories WPF 多个 StylusPlugIn 的事件触发顺序 lindexi 2019-10-21 08:33:15 +080 ...
- Java练习 SDUT-3081_谁是最强女汉子
谁是最强的女汉子 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 众所周知,一年一度的女汉子大赛又来啦.由于最近女汉子比 ...
- textarea 转HTML
Text2Html(str) { if (str == null) { return ""; } else if (str.length == 0) { return " ...
- iOS中几种数据持久化方案:我要永远地记住你!
http://www.cocoachina.com/ios/20150720/12610.html 作者:@翁呀伟呀 授权本站转载 概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启 ...
- Python基础:12函数细节
一:返回值 当没有显式地返回元素时,Python 会返回一个None.如果函数返回多个对象,python 把他们聚集起来并以一个元组返回. 二:创建函数 1:强烈推荐,在函数体之前,编写函数的文档字符 ...
- 如何解决iOS内存错误
由于iOS5.0之前没有自动应用计数机制,也没有Java那样的垃圾回收功能.我们都需要自己管理和控制对象的回收,这是一件很麻烦的事情,也是做iOS项目中最容易出现的问题.如果不掌握这些方法,调试这些问 ...
- oracle选择最有效率的表名顺序
ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理. 在FROM子句中包含多个表的情况下,你必须选择记录条 ...
- @hdu - 6594@ Double Tree
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定两棵 N 个点的树,以及树上每条边的权值 w(u, v),每 ...
- HTML打印print
上代码: //打印 function printme() { global_Html = document.body.innerHTML; //document.body.innerHTML = do ...
- hdu 3873 Invade the Mars(有限制的最短路 spfa+容器)
Invade the Mars Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 365768/165536 K (Java/Others ...