SpringCloud 微服务开放平台接口

一、什么是开放平台接口

场景 :
总公司与子公司 对接接口 还有一些合作伙伴

总公司 提供接口
1、能够获取到哪个子公司调用
2、授权机制,能够灵活控制接口调用权限。
例:阿里和顺丰闹矛盾,顺丰把权限修改阿里巴巴就不能调用接口。

很多公司都有开放平台接口可以供我们练习使用的哈哈:比如腾讯的QQ互联网、微信开放平台、蚂蚁金服开放平台 、微博开放平台,比如实现功能QQ联合登陆、微信扫码登陆。都提供了相应的开放平台。

访问:https://github.com/spring-cloud/spring-cloud-security 源码中有这个组件 帮助快速搭建开放平台 实现授权流程
oauth2
**OAuth2.0:**Oauth2.0(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务器提供者上的信息,而不需要将用户名和密码提供给第三方网站或者分享他们数据的所有内容。

以QQ联合登录为例,它使用的就是oauth2.0协议,进行授权认证时通常有一下几个步骤:
1.生成授权链接,获取授权码
2.使用授权码获取accessToken
3.使用accessToken获取openId
4.使用openId获取用户信息

常见的开放平台:
腾讯的QQ互联、微信开放平台、蚂蚁金服开放平台、微博开放平台,可以实现QQ联合登录、微信扫码登录等第三方登录功能。
QQ互联开放平台:https://wiki.connect.qq.com/准备工作_oauth2-0

OAuth2四种授权方式:
1、授权码(认证码)模式(Authorization code):用在客户端与服务器端应用之间的授权,response_type=code
2、简化(隐形)模式(Impilict):应用在移动app或者web app(在移动设备上的,如在手机中调用微信来进行认证授权),response_type=token
3、密码模式(Resource Owner Password Credentials):应用直接都是受信的,如都是由同一家公司开发,grant_type=password
4、客户端模式(Client Credentials):用在应用API访问,grant_type=client_credential
一般情况下,1和3应用比较多,2都是应用在移动端,4应用不多

相关概念
appId (商户号,给子公司或者合作商户提供的)+ appKey(密钥,验证密钥) (这俩配套的 都是必备的,并且appID永久不能改,appKey可以改)

Authorization code: 授权码,用来获取accessToken

accessToken: 调用接口权限访问令牌

redirect_uri: 回调地址 授权成功 重定向地址 保证安全性 不要随便拼接成别的地址

openId: 开放平台生成唯一的id

二、调用QQ互联

1、需要在qq互联上面申请权限获取appId和appKey

2、调用连接获取授权码
https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=101462456&state=888&redirect_uri=http://mayikt.s1.natapp.cc/qqLoginBack
client_id就是申请的appId(商户号),state是防止csrf攻击的,随机生成的
点击授权登录之后浏览地地址会变化
授权码
code即为授权码(只要1分组有效期)

3、使用用户获取的授权码,获取对应的accessToken
获取到授权码之后,代表登录成功了,但是不代表合作伙伴已经对接成功。 授权码获取accessToken,然后再去获取openId,然后再去数据库查询关联的openId。有的话直接登录,没有就需要关联

https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id=101462456&client_secret=4488033be77331e7cdcaed8ceadc10d5&code=E91DF5B0E2455A6B2AF25CD9FA1C7582&redirect_uri=http://mayikt.s1.natapp.cc/qqLoginBack
通过授权码调用,grant_type就是为authorization_code
client_id为商户号
client_secret为appKey
code就是授权码
redirect_url:重定向地址,与前面保持一致

通过访问这个地址就会获取到 accessToken!! 拿到accessToken就可以调用接口了! (父公司可以通过 accessToken 逆向出 谁在调用我的接口。 在表里面accessToken和openId是关联的(每个合作的网站域名是唯一的,一个域名一个openid的))

在Spring Cloud里面流程底层已经帮助实现了哈 只要关注表结构就OK了
在这里插入图片描述

4、使用accessToken获取用户openid
使用刚刚生成的accessToken
https://graph.qq.com/oauth2.0/me?access_token=B2FD1997D149313F16C93D91C75AC75E
openid
获取到 openId就可以获取到用户相关信息了,授权码只能用一次! 授权了一段时间后就销毁了。需要重新授权。

5、使用openId获取用户信息

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

此时会返回各种用户信息的~ 包括头像 图片之类的 性别 地址等等

三、原理分析

OAuth认证和授权的过程如下:
1、用户访问第三方网站网站(自公司),想对用户存放在服务商的某些资源进行操作。
2、第三方网站(自公司)向服务商(父公司)请求一个临时令牌。
3、服务商验证第三方网站的身份后,授予一个临时令牌。
4、第三方网站获得临时令牌后,将用户导向至服务商的授权页面请求用户授权,然后这个过程中将临时令牌和第三方网站的返回地址发送给服务商。
5、用户在服务商的授权页面上输入自己的用户名和密码,授权第三方网站访问所相应的资源。
6、授权成功后,服务商将用户导向第三方网站的返回地址。
7、第三方网站根据临时令牌从服务商那里获取访问令牌。
8、服务商根据令牌和用户的授权情况授予第三方网站访问令牌。
9、第三方网站使用获取到的访问令牌访问存放在服务商的对应的用户资源。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Cloud微服务架构中,Nacos是一个注册中心和配置中心。Feign是一个声明式的Web服务客户端,它使得编写Web服务客户端变得更加容易。 使用Feign调用接口需要以下步骤: 1. 在pom.xml中添加Feign依赖 ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> ``` 2. 在启动类上添加@EnableFeignClients注解启用Feign客户端 ```java @SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` 3. 创建接口,并使用@FeignClient注解指定调用的服务名称和服务路径 ```java @FeignClient(name = "service-provider") public interface UserService { @GetMapping("/user/{id}") String getUserById(@PathVariable("id") Long id); } ``` 其中,name属性指定服务名称,GetMapping注解指定服务路径。 4. 在需要使用该服务的地方注入UserService并调用方法即可 ```java @RestController public class UserController { @Autowired private UserService userService; @GetMapping("/user/{id}") public String getUserById(@PathVariable("id") Long id) { return userService.getUserById(id); } } ``` 在这个例子中,我们定义了一个名为UserService的Feign客户端,指定了调用的服务名称和服务路径。然后在UserController中注入了UserService并调用了其方法。最终,Feign会自动将该请求转发到名为service-provider的微服务,并返回结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值