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 唯一