接上一篇异业合作,如果一个第三方系统(我们定义为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
username使用原文;

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开发(第三方接口授权访问)相关推荐

  1. Java 调用第三方接口方法

    Java 调用第三方接口方法 一. 通过JDK网络类Java.net.HttpURLConnection 1.java.net包下的原生java api提供的http请求 使用步骤: 1.通过统一资源 ...

  2. java调第三方接口

    目录 背景 Spring的RestTemplate 1.引入依赖 2.RestTemplate配置类 3.RestTemplate实现类 背景 java调第三方接口我百度的有三种方法. 第一种:通过J ...

  3. Java 调用第三方接口,实战来了!

    在项目开发中经常会遇到调用第三方接口的情况,比如说调用第三方的天气预报接口. 1.准备工作: 在项目的工具包下导入HttpClientUtil这个工具类,或者也可以使用Spring框架的restTem ...

  4. Java调用第三方接口示范

    在项目开发中经常会遇到调用第三方接口的情况,比如说调用第三方的天气预报接口. 使用流程 [1]准备工作:在项目的工具包下导入HttpClientUtil这个工具类,或者也可以使用Spring框架的re ...

  5. java调用第三方接口示例

    引言:在我们开发的过程中,常常会听到或者接触到第三方接口,那么这个第三方接口到底是什么呢? 简单来说就是一个远程接口,不是在你本机上的,你需要通过远程url去访问调用该接口.许多项目中有明确的要求需要 ...

  6. 我也没想到,Java开发 API接口可以不用写 Controller了

    大家好,我是小富~ 今天介绍我正在用的一款高效敏捷开发工具magic-api,顺便分享一点工作中使用它的心得 缘起 先说一下我为什么会使用这个工具? 最近新启动一个项目,业务并不算复杂,那种典型的管理 ...

  7. java对接第三方接口

    1.准备与第三方接口对接的账号 配置到了Apollo上面 @Value("${taofake.appId}")private String appId;@Value("$ ...

  8. java给第三方接口发送数据_对接第三方接口--使用post请求发送json数据

    对接第三方接口–使用post请求发送json数据 实习4个多月,终于转正!终于可以安心好好上班,好好学习!第一篇播客记录下工作中的中的小知识点. 本文记录的内容如下: 1.使用HttpClient相关 ...

  9. Java连接第三方接口获取数据

    第一步 pom文件添加如下依赖 <!--HttpClient--><dependency><groupId>commons-httpclient</group ...

最新文章

  1. 10万人的1000万张图像,微软悄然删除最大公开人脸数据集
  2. shiro注销其他用户_Shiro实现互斥登录,并踢出登录用户功能。
  3. java阻塞锁_java – 阻止锁与非阻塞锁
  4. 1.5编程基础之循环控制 03 均值 python
  5. 金山云笔试题:AKM函数
  6. bash脚本编程之条件判断、条件测试
  7. javascript学习资料汇集
  8. 老人为啥怒砸30辆车
  9. vue 窗口变小文字_页面字体随窗口变化大小
  10. 如何写一份好的软件开发的需求分析
  11. 本地远程连接服务器调试
  12. SwiftUI 绘制刻度时钟表盘(自定义组件教程含源码)
  13. hdu5020 Revenge of Collinearity 求三点共线的点对个数
  14. matlab拟合多自变量函数,多个自变量的函数拟合问题
  15. HBase初识之学生心得总结
  16. DPI、PPI、DP、PX 的详细计算方法及算法来源是什么
  17. 大數據環境搭建,數據採集,數倉環境準備(hive on spark) 01
  18. Android 购物车UI及逻辑实现
  19. 二级c语言考试系统安卓,无忧考吧二级c语言考试系统下载_无忧考吧二级c语言考试系统官方下载-太平洋下载中心...
  20. 海康威视监控,RSTP转m3u8展示在移动端网页

热门文章

  1. HanLP --- 依存句法分析
  2. Linux就这个范儿 第13章 打通任督二脉
  3. 【Python】文件夹的基本操作
  4. 常用遥感卫星数据汇总
  5. 如何实现Word、PDF、TXT文件的全文内容检索?
  6. 程序员最该买的十本书
  7. Prometheus客户端节点监控node_exporter
  8. 学习使用master.dbo.spt_values表
  9. vue-devtools 各版本安装
  10. MySQL简单入门教程