Spring Cloud 微服务开放平台接口
github源码地址:
https://github.com/spring-cloud/spring-cloud-security
前言:
什么是开放平台接口
场景 :
总公司与子公司 对接接口 还有一些合作伙伴
总公司 提供接口 1、能够获取到哪个子公司调用 2、授权机制,能够灵活控制接口调用权限。阿里和顺丰闹矛盾,顺丰把权限修改阿里巴巴就不能调用接口。
很多公司都有开放平台接口可以供我们练习使用的哈哈:比如腾讯的QQ互联网、微信开放平台、蚂蚁金服开放平台 、微博开放平台,比如实现功能QQ联合登陆、微信扫码登陆。都提供了相应的开放平台。
访问:https://github.com/spring-cloud/spring-cloud-security 源码中有这个组件 帮助快速搭建开放平台 实现授权流程
OAuth: OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容。
QQ登录OAuth2.0:对于用户相关的OpenAPI(例如获取用户信息,动态同步,照片,日志,分享等),为了保护用户数据的安全和隐私,第三方网站访问用户数据前都需要显式的向用户征求授权。
QQ登录OAuth2.0采用OAuth2.0标准协议来进行用户身份验证和获取用户授权,相对于之前的OAuth1.0协议,其认证流程更简单和安全。
注意使用这个框架时候,表名不要随便改!底层都是写好了的昂!
我们自己做完开放平台api接口,配备的还要有文档,我们自己整合swagger就OK了。
常用开放平台
QQ互联网开放平台
http://wiki.connect.qq.com/%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C_oauth2-0
什么是Oauth2
在开放平台接口设计中,遵循Oauth2.0协,认证授权协议(JWT)
在微服务里面,Oauth2 有密码模式 授权码模式
认证授权协议,其实都是用链接,点解时候发起授权。比如点击登录,点击了一个连接进行授权。
小结:
OAuth: OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容。
QQ登录OAuth2.0:对于用户相关的OpenAPI(例如获取用户信息,动态同步,照片,日志,分享等),为了保护用户数据的安全和隐私,第三方网站访问用户数据前都需要显式的向用户征求授权。
QQ登录OAuth2.0:采用OAuth2.0标准协议来进行用户身份验证和获取用户授权,相对于之前的OAuth1.0协议,其认证流程更简单和安全。
概念:
appId (商户号,给子公司或者合作商户提供的)+ appKey(密钥,验证密钥) (这俩配套的 都是必备的,并且appID永久不能改,appKey可以改)
accessToken 调用接口权限访问令牌
回调地址 授权成功 重定向地址 保证安全性 不要随便拼接成别的地址了
Authorization code 通过授权码获取accessToken
openId 开放平台生成唯一的id
体验下开放平台——调用QQ互联网接口的大体流程:
1、 生成授权链接,获取授权码
生成授权连接: 我截了个网易云音乐的图
点击之后:
用户点击之后,才会获取授权码
注意这个连接的 client_id 就是 appId (商户号,给子公司或者合作商户提供的, 第三方需要的)
state是防止csrf攻击的,随机生成的
PS:如果我们自己设计的话,重要表结构: 回调地址的作用:以连接形式跳转到腾讯获取授权码,用户授权成功之后,跳转到回调地址redirect_uri回调地址(我们自定义的地址)
上面的那个连接是网易自己封装的,我随便截的图,我们开发时候自己封装连接,在我们自己的网站上面,点击这个连接,然后会跳转到腾讯那边
https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=101462456&state=888&redirect_uri=http://toov5.fuck.com/qqLoginBack 我们自己拼接的
点击后:
会调用:http://toov5.fuck.com/qqLoginBack?code=23EDESD2346FSDFNWE436346&state=99
2、 使用授权码获取AccessToken
获取到授权码之后,代表登录成功了,但是不代表合作伙伴已经对接成功。 授权码获取accessToken,然后再去获取openId,然后再去数据库查询关联的openId。有的话直接登录,没有就需要关联之
令牌的作用,就是临时的效果作用(10分钟)。
https://graph.qq.com/oauth2.0/token? grant_type=authorization_code&client_id=101462456&client_secret=23EDESD2346FSDFNWE436346&code=23EDESD2346FSDFNWE436346 & redirect_uri=http://mayikt.s1.natapp.cc/qqLoginBack
授权类型 密钥 配置好的appKey 授权码 返回的 Authorization code : 回调地址
在Spring Cloud里面流程底层已经帮助实现了哈 只要关注表接口就OK了
通过访问这个地址就会获取到 accessToken!! 拿到accessToken就可以调用接口了! (父公司可以通过 accessToken 逆向出 谁在调用我的接口。 在表里面accessToken和openId是关联的(每个合作的网站www.toov5.com是唯一的,一个域名一个openid的))、
表结构:
3、 使用AccessToken获取openId
通过accessToken之后,进而获取用户openId
自我拼接开发:
https://graph.qq.com/oauth2.0/me?access_token=B2FD1997D149313F16C93D91C75AC75E
访问后:
获取到 openId就可以获取到用户相关信息了,授权码只能用一次! 授权了一段时间后就销毁了。需要重新授权哈
4、 使用openId获取用户信息
https://graph.qq.com/user/get_user_info?access_token=B2FD1997D149313F16C93D91C75AC75E&oauth_consumer_key=101462456&openid=4B1717CBBFE1E900D2A1482C4A18B3BD
accessToken appId openId
此时会返回各种用户信息的~ 包括头像 图片之类的 性别 地址等等
注: 数据库中 user 表 新增一个字段 qq_pen_id 字段
总结:
注: QQ联合登录基于Oauth2.0实现的
认证授权协议: 通过连接进行授权
1、生成Code连接 后去授权码 (用户点击)
2、使用用户获取的授权码,获取对应的accessToken (临时的效果作用)
3、使用accessToken获取用户openId(调用第三方接口)
4、使用penId获取用户信息
访问这个连接 会读取qq信息,哪个账户在登录
点击确定 跳转到回调的url中 并且携带者code
示例:
1、生成授权CODE链接,获取授权码 ----用户点击
https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=101462456&state=888&redirect_uri=http://toov5.s1.natapp.cc/qqLoginBack
2、使用用户获取的授权码,获取对应的accessToken
https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id=101462456&client_secret=4488033be77331e7cdcaed8ceadc10d5&code=E91DF5B0E2455A6B2AF25CD9FA1C7582&
redirect_uri=http://toov5.s1.natapp.cc/qqLoginBack
3、使用accessToken获取用户openid
https://graph.qq.com/oauth2.0/me?access_token=B2FD1997D149313F16C93D91C75AC75E
4、使用openid获取用户信息
https://graph.qq.com/user/get_user_info?access_token=B2FD1997D149313F16C93D91C75AC75E&oauth_consumer_key=101462456&openid=4B1717CBBFE1E900D2A1482C4A18B3BD
Oauth2授权原理
OAuth认证和授权的过程如下:
1、用户访问第三方网站网站(自公司),想对用户存放在服务商的某些资源进行操作。
2、第三方网站(自公司)向服务商(父公司)请求一个临时令牌。
3、服务商验证第三方网站的身份后,授予一个临时令牌。
4、第三方网站获得临时令牌后,将用户导向至服务商的授权页面请求用户授权,然后这个过程中将临时令牌和第三方网站的返回地址发送给服务商。
5、用户在服务商的授权页面上输入自己的用户名和密码,授权第三方网站访问所相应的资源。
6、授权成功后,服务商将用户导向第三方网站的返回地址。
7、第三方网站根据临时令牌从服务商那里获取访问令牌。
8、服务商根据令牌和用户的授权情况授予第三方网站访问令牌。
9、第三方网站使用获取到的访问令牌访问存放在服务商的对应的用户资源。
获取accessToken时候需要client_id 和client_client_secret
openId 获取用户信息 每个合伙网站保证唯一
www.toov5.com 这个域名的openId 唯一
Spring Cloud 微服务开放平台接口的更多相关文章
- 【多线程】java多线程Completablefuture 详解【在spring cloud微服务之间调用,防止接口超时的应用】【未完成】
参考地址:https://www.jianshu.com/p/6f3ee90ab7d3 示例: public static void main(String[] args) throws Interr ...
- Spring Cloud微服务接口这么多怎么调试
导读 我们知道在微服务架构下,软件系统会被拆分成很多个独立运行的服务,而这些服务间需要交互通信,就需要定义各种各样的服务接口.具体来说,在基于Spring Cloud的微服务模式中,各个微服务会基于S ...
- Spring Cloud微服务学习笔记
Spring Cloud微服务学习笔记 SOA->Dubbo 微服务架构->Spring Cloud提供了一个一站式的微服务解决方案 第一部分 微服务架构 1 互联网应用架构发展 那些迫使 ...
- Spring Cloud微服务Sentinel+Apollo限流、熔断实战总结
在Spring Cloud微服务体系中,由于限流熔断组件Hystrix开源版本不在维护,因此国内不少有类似需求的公司已经将眼光转向阿里开源的Sentinel框架.而以下要介绍的正是作者最近两个月的真实 ...
- Spring Cloud微服务限流之Sentinel+Apollo生产实践
Sentinel概述 在基于Spring Cloud构建的微服务体系中,服务之间的调用链路会随着系统的演进变得越来越长,这无疑会增加了整个系统的不可靠因素.在并发流量比较高的情况下,由于网络调用之间存 ...
- Dubbo和Spring Cloud微服务架构比较
Dubbo 出生于阿里系,是阿里巴巴服务化治理的核心框架,并被广泛应用于中国各互联网公司:只需要通过 Spring 配置的方式即可完成服务化,对于应用无入侵,设计的目的还是服务于自身的业务为主. 微服 ...
- 在阿里云容器服务上开发基于Docker的Spring Cloud微服务应用
本文为阿里云容器服务Spring Cloud应用开发系列文章的第一篇. 一.在阿里云容器服务上开发Spring Cloud微服务应用(本文) 二.部署Spring Cloud应用示例 三.服务发现 四 ...
- Dubbo 和 Spring Cloud微服务架构 比较及相关差异
你真的了解微服务架构吗?听听八年阿里架构师怎样讲述Dubbo和Spring Cloud微服务架构. 微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务, ...
- Spring Cloud 微服务架构解决方案
1 理解微服务 1.1 软件架构演进 软件架构的发展经历了从单体结构.垂直架构.SOA架构到微服务架构的过程. 1.1.1 单体架构 特点: 1.所有的功能集成在一个项目工程中. 2.所有的功能打一个 ...
随机推荐
- A1231. Crash的数字表格(贾志鹏)
A1231. Crash的数字表格(贾志鹏) 时间限制:2.0s 内存限制:512.0MB 总提交次数:410 AC次数:154 平均分:63.93 将本题分享到: ...
- 关于Z序的总结
//转自:http://blog.csdn.net/flowshell/article/details/4797917 Z 序:一个重叠窗口的堆,每个窗口在Z 序中 都有唯一一个位置.一个窗口的Z 序 ...
- 160706、Java HashMap工作原理及实现
1. 概述 从本文你可以学习到: 什么时候会使用HashMap?他有什么特点? 你知道HashMap的工作原理吗? 你知道get和put的原理吗?equals()和hashCode()的都有什么作用? ...
- ubuntu16.04搭建jdk1.8运行环境
搭建环境:Ubuntu 16.04 ×64 JDK :jdk-8u171-linux-x64.tar.gz 首先下载linux对应的安装包下载地址:http://www.oracle.com/tech ...
- Linux网络配置:设置IP地址、网关DNS、主机名
查看网络信息 1.ifconfig eth0 2.ifconfig -a 3.ip add 设置主机名需改配置文件: /etc/hosts /etc/sysconfig/network vim /et ...
- 解决ajax无法给js全局变量赋值的问题
解决ajax无法给js全局变量赋值的问题 http://blog.csdn.net/qq_26222859/article/details/51543433 在ajax中是无法给js中的全局变量赋值的 ...
- Python WSGI v1.0 中文版(转)
add by zhj: WSGI全称Web Server Gateway Interface,即Web网关接口.其实它并不是OSI七层协议中的协议,它就是一个接口而已,即函数,而WSGI规定了该接口的 ...
- LAMP兄弟连 视频教程集
电驴的资源:http://www.verycd.com/topics/2843130/?ref=msg
- 使用Kotlin进行Android开发
Kotlin是一门基于JVM的编程语言,它正成长为Android开发中用于替代Java语言的继承者.Java是世界上使用最多的编程语言之一,当其他编程语言为更加便于开发者使用而不断进化时,Java并 ...
- 维多利亚的秘密 golang入坑系列
原文在gitbook,字字原创,版权没有,转载随意. 在写本文的前一天,2017维密在上海开始了. 为了纪念屌丝界的盛世,特为本节起名维多利亚的秘密.现在的社会,要想出名只有抓眼球.所以写份技术文章, ...