Spring Cloud 微服务开放平台接口

github源码地址:
https://github.com/spring-cloud/spring-cloud-securitygit

前言:

什么是开放平台接口github

场景 :

 总公司与子公司 对接接口  还有一些合做伙伴spring

 总公司 提供接口  一、可以获取到哪一个子公司调用   二、受权机制,可以灵活控制接口调用权限。阿里和顺丰闹矛盾,顺丰把权限修改阿里巴巴就不能调用接口。数据库

 不少公司都有开放平台接口能够供咱们练习使用的哈哈:好比腾讯的QQ互联网、微信开放平台、蚂蚁金服开放平台 、微博开放平台,好比实现功能QQ联合登录、微信扫码登录。都提供了相应的开放平台。api

 

访问:https://github.com/spring-cloud/spring-cloud-security   源码中有这个组件  帮助快速搭建开放平台   实现受权流程安全

 

OAuth: OAuth(开放受权)是一个开放标准,容许用户受权第三方网站访问他们存储在另外的服务提供者上的信息,而不须要将用户名和密码提供给第三方网站或分享他们数据的全部内容。
QQ登陆OAuth2.0:对于用户相关的OpenAPI(例如获取用户信息,动态同步,照片,日志,分享等),为了保护用户数据的安全和隐私,第三方网站访问用户数据前都须要显式的向用户征求受权。
QQ登陆OAuth2.0采用OAuth2.0标准协议来进行用户身份验证和获取用户受权,相对于以前的OAuth1.0协议,其认证流程更简单和安全。微信

注意使用这个框架时候,表名不要随便改!底层都是写好了的昂! app

咱们本身作完开放平台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互联网接口的大致流程

一、 生成受权连接,获取受权码

       生成受权链接: 我截了个网易云音乐的图

点击以后:

用户点击以后,才会获取受权码

  注意这个链接的 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              

二、 使用受权码获取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的))、

 表结构:

 

三、 使用AccessToken获取openId

    经过accessToken以后,进而获取用户openId 

    自我拼接开发:

    https://graph.qq.com/oauth2.0/me?access_token=B2FD1997D149313F16C93D91C75AC75E

   访问后:

  

   获取到 openId就能够获取到用户相关信息了,受权码只能用一次! 受权了一段时间后就销毁了。须要从新受权哈

   

四、 使用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实现的

认证受权协议: 经过链接进行受权

一、生成Code链接  后去受权码  (用户点击)

二、使用用户获取的受权码,获取对应的accessToken (临时的效果做用)

三、使用accessToken获取用户openId(调用第三方接口)

四、使用penId获取用户信息

 

访问这个链接 会读取qq信息,哪一个帐户在登陆

点击肯定 跳转到回调的url中 而且携带者code

 

示例:

一、生成受权CODE连接,获取受权码 ----用户点击

https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=101462456&state=888&redirect_uri=http://toov5.s1.natapp.cc/qqLoginBack

二、使用用户获取的受权码,获取对应的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

三、使用accessToken获取用户openid

https://graph.qq.com/oauth2.0/me?access_token=B2FD1997D149313F16C93D91C75AC75E
四、使用openid获取用户信息

https://graph.qq.com/user/get_user_info?access_token=B2FD1997D149313F16C93D91C75AC75E&oauth_consumer_key=101462456&openid=4B1717CBBFE1E900D2A1482C4A18B3BD

 

 

Oauth2受权原理

OAuth认证和受权的过程以下:
一、用户访问第三方网站网站(自公司),想对用户存放在服务商的某些资源进行操做。
二、第三方网站(自公司)向服务商(父公司)请求一个临时令牌。
三、服务商验证第三方网站的身份后,授予一个临时令牌。
四、第三方网站得到临时令牌后,将用户导向至服务商的受权页面请求用户受权,而后这个过程当中将临时令牌和第三方网站的返回地址发送给服务商。
五、用户在服务商的受权页面上输入本身的用户名和密码,受权第三方网站访问所相应的资源。
六、受权成功后,服务商将用户导向第三方网站的返回地址。
七、第三方网站根据临时令牌从服务商那里获取访问令牌。
八、服务商根据令牌和用户的受权状况授予第三方网站访问令牌。
九、第三方网站使用获取到的访问令牌访问存放在服务商的对应的用户资源。

 

 

获取accessToken时候须要client_id 和client_client_secret

openId 获取用户信息 每一个合伙网站保证惟一

www.toov5.com   这个域名的openId 惟一

相关文章
相关标签/搜索