JAVA开发(第三方接口授权访问)
接上一篇异业合作,如果一个第三方系统(我们定义为B系统)需要直接调用本系统(我们定义为A系统),那么系统间必须授权才能访问已保证系统的数据安全。
首先我们定义接口的请求示例,已http协议为例:
http://接口URL?token =xx &jsonData=xxxxx&sign=xxxx
我们可以看到需要访问A系统,我们需要携带token,调用A系统的参数而且这些参数是经过加密的,还有签名。
数据传输标准:
调用方式(url)
POST,视具体接口定义
请求类型(ContentType)
application/json
响应类型(ContentType)
application/json
首先B系统在请求A系统的数据接口之前先调用A系统的获取token接口。
/oauth2/accessToken
token需要的参数:
参数 |
参数选项 |
意义 |
grant_type |
必须 |
该值固定为access_token |
client_id |
必须 |
即对接账号(A系统和B系统约定的账号id) |
timestamp |
必须 |
当前调用时间,格式为yyyy-MM-dd HH:mm:ss 示例: “2018-01-01 01:01:01” 时差不能相差半小时以上 |
username |
必须 |
用户名(A系统和B系统约定的账号) |
password |
必须 |
用户密码(双方预定),必须是md5加密后的字符串,不要使用原文!大写 |
scope |
必须 |
申请权限。(传0,为以后扩展用) |
sign |
必须 |
签名,生成规则如下: 按照以下顺序将字符串拼接起来 client_secret+timestamp+client_id+username+password+grant_type+scope+client_secret client_secret(双方约定 需要md5加密后的转大写)、password(需要md5加密后的转大写); 将上述拼接的字符串使用MD5加密,加密后的值再转为大写 |
返回的token数据字段:
类型JSON |
|
参数 |
意义 |
uid |
唯一id |
access_token |
令牌 |
refresh_token |
刷新token |
time |
当前时间 |
expires_in |
access_token的过期时间,秒级别,86400秒后过期,即24小时有效期 |
refresh_token_expires |
refresh_token的过期时间,毫秒级别 |
返回的token数据格式样例:
{"result": true,"msg": "success","uid": "57","access_token": "8BAC35711832492780DA535259949CA8","refresh_token": "FF69836D701C49E88EB1823AB545CEFB","time": 1564385329500,"expires_in": 86400,"refresh_token_expires": 1567063729500
}
接下来就可以通过token去请求接口了。
将需要传的参数抽象出来组装成公共参数:
/*** * @param inputParam* @return*/public Map<String, Object> getSendParam(Map<String, Object> inputParam){Map<String, Object> params = new LinkedHashMap<>();//上面获取的token的逻辑String token = getACToken();String timestamp = String.valueOf(System.currentTimeMillis() / 1000);String input = JSONObject.toJSONString(inputParam);log.info("本次接口发送参数:"+input);//对参数进行加密处理String inputDES = Des3Utils.get3DESEncryptECB(input, desKey);byte[] decoded = Base64.getDecoder().decode(inputDES);String inputHex = Des3Utils.byteToHexString(decoded);String subString = subSign(input, timestamp, token);String sign = MD5Util.getMd5(subString).toUpperCase();//拼接参数params.put("token", token);params.put("sign", sign);params.put("timestamp", timestamp);params.put("clientId", clientId);params.put("jsonData", inputHex);return params;}
JAVA开发(第三方接口授权访问)相关推荐
- Java 调用第三方接口方法
Java 调用第三方接口方法 一. 通过JDK网络类Java.net.HttpURLConnection 1.java.net包下的原生java api提供的http请求 使用步骤: 1.通过统一资源 ...
- java调第三方接口
目录 背景 Spring的RestTemplate 1.引入依赖 2.RestTemplate配置类 3.RestTemplate实现类 背景 java调第三方接口我百度的有三种方法. 第一种:通过J ...
- Java 调用第三方接口,实战来了!
在项目开发中经常会遇到调用第三方接口的情况,比如说调用第三方的天气预报接口. 1.准备工作: 在项目的工具包下导入HttpClientUtil这个工具类,或者也可以使用Spring框架的restTem ...
- Java调用第三方接口示范
在项目开发中经常会遇到调用第三方接口的情况,比如说调用第三方的天气预报接口. 使用流程 [1]准备工作:在项目的工具包下导入HttpClientUtil这个工具类,或者也可以使用Spring框架的re ...
- java调用第三方接口示例
引言:在我们开发的过程中,常常会听到或者接触到第三方接口,那么这个第三方接口到底是什么呢? 简单来说就是一个远程接口,不是在你本机上的,你需要通过远程url去访问调用该接口.许多项目中有明确的要求需要 ...
- 我也没想到,Java开发 API接口可以不用写 Controller了
大家好,我是小富~ 今天介绍我正在用的一款高效敏捷开发工具magic-api,顺便分享一点工作中使用它的心得 缘起 先说一下我为什么会使用这个工具? 最近新启动一个项目,业务并不算复杂,那种典型的管理 ...
- java对接第三方接口
1.准备与第三方接口对接的账号 配置到了Apollo上面 @Value("${taofake.appId}")private String appId;@Value("$ ...
- java给第三方接口发送数据_对接第三方接口--使用post请求发送json数据
对接第三方接口–使用post请求发送json数据 实习4个多月,终于转正!终于可以安心好好上班,好好学习!第一篇播客记录下工作中的中的小知识点. 本文记录的内容如下: 1.使用HttpClient相关 ...
- Java连接第三方接口获取数据
第一步 pom文件添加如下依赖 <!--HttpClient--><dependency><groupId>commons-httpclient</group ...
最新文章
- 10万人的1000万张图像,微软悄然删除最大公开人脸数据集
- shiro注销其他用户_Shiro实现互斥登录,并踢出登录用户功能。
- java阻塞锁_java – 阻止锁与非阻塞锁
- 1.5编程基础之循环控制 03 均值 python
- 金山云笔试题:AKM函数
- bash脚本编程之条件判断、条件测试
- javascript学习资料汇集
- 老人为啥怒砸30辆车
- vue 窗口变小文字_页面字体随窗口变化大小
- 如何写一份好的软件开发的需求分析
- 本地远程连接服务器调试
- SwiftUI 绘制刻度时钟表盘(自定义组件教程含源码)
- hdu5020 Revenge of Collinearity 求三点共线的点对个数
- matlab拟合多自变量函数,多个自变量的函数拟合问题
- HBase初识之学生心得总结
- DPI、PPI、DP、PX 的详细计算方法及算法来源是什么
- 大數據環境搭建,數據採集,數倉環境準備(hive on spark) 01
- Android 购物车UI及逻辑实现
- 二级c语言考试系统安卓,无忧考吧二级c语言考试系统下载_无忧考吧二级c语言考试系统官方下载-太平洋下载中心...
- 海康威视监控,RSTP转m3u8展示在移动端网页