1. 概述
1.1 应用场景
Java代码实现摘要签名认证方式 文档使用 Java 代码实现摘要签名认证方式,但存在一定操作难度。
1.2 实现思路
将 Java代码实现摘要签名认证方式 文档中的 Java 代码函数化,FDL 中调用函数就能生成签名。
2. 操作步骤
2.1 添加 JAR 文件
文件下载:fdlzhaiyao.jar
2.1.1 FDL为独立部署工程
将 fdlzhaiyao.jar 文件放置到 %Tomcat/webapps/webroot/WEB-INF/lib下,并重启 FDL 工程。
2.1.2 FDL为ops部署工程
1)如为运维平台部署的项目,请将 fdlzhaiyao.jar 文件上传至 FDL 工程外挂目录的 customlib 文件夹下。
如忘记工程外挂目录位置,请参考文档查询:导出项目部署信息
2)重启 FDL 工程。
2.2 数据服务 API 准备
用户已经发布API,同时绑定API至应用,并设置应用认证方式为摘要认证。
2.3 生成签名
1)新建定时任务,拖入「数据转换」节点,进入「数据转换」节点。
2)拖入「Spark SQL」算子,输入 SQL 语句:
select fdlzhaiyaoencry("b7ca33fa-d19f-4c1a-8e98-1e2b400b6f8b","POST","application/json","93ee041b-914a-4f80-bbea-a200611b18f7/demo","{\"paging\":{\"pageSize\":10,\"pageNum\":1},\"params\":[]}") AS A
SQL 语句中各参数说明如下表所示:
用户需要根据下表说明,根据实际情况修改 SQL 语句;更多说明请参见:Java代码实现摘要签名认证方式
示例SQL中的参数 | 含义 |
---|---|
b7ca33fa-d19f-4c1a-8e98-1e2b400b6f8b | 应用密钥 在「数据服务>应用列表」,选择摘要签名,即复制 AppSecret,如下图所示: |
POST | 请求方法,目前支持传入GET和POST。注:需要大写。 |
application/json | BODY 的 MIME 类型 POST 请求需要写 contentType,GET 请求此处写空字符串 |
93ee041b-914a-4f80-bbea-a200611b18f7/demo | API 配置页面配置的 API 路径 如果是 get 请求,需要带上参数,例如xxx/xxx?a=1 示例:http://192.168.5.175:8089/webroot/service/publish/<appid>/api01?a=1&b=2中的加粗部分,不包含首尾的斜杠 在 API 列表下的授权应用中复制 API 路径,如下图所示: |
{\"paging\":{\"pageSize\":10,\"pageNum\":1},\"params\":[]} | POST 请求时,在 Body 中的参数字符串
例如 JSON 格式的 Body,示例为: {"paging":{"pageSize":10,"pageNum":1},"params":[]} 对于以上请求体内容,先做 MD5 处理(输出32位小写字符串),结果再进行 BASE64 编码,得到最终的 Content-MD5 结果。 注:pageSize 为每页数据条数(最大限制为10000),pageNum为页数,用户可根据实际情况修改这两个参数的值 |
3)点击「数据预览」,如下图所示:
完整的预览结果为:HMAC-SHA256 Signature=cKcm3/B9ZpbsJFJDQuiCubttI2PmZ8DQBHgBlbE3IJY=,Nonce=3b735fe9-cbfe-4c82-ba9a-e5c1fb4c0145,Timestamp=1731896867478
构成元素说明:Signature=Signature值, Nonce=Nonce随机数, Timestamp=Timestamp时间戳
使用该签名调用 API 时,校验项目:
验证项目 | 通过条件 |
---|---|
Timestamp | 与服务端当前时间相比,晚5min以内 |
Nonce | 服务端在5min内,没有重复的Nonce |
Signature | 服务端计算的 Signature 与请求头中的 Signature 完全一致 |
2.4 调用数据服务API
本文示例在 FDL 中调用数据服务发布的 API 。
1)在本文 2.3 节步骤基础上,拖入「参数输出」算子,将 2.3 节结果输出为参数 a。如下图所示:
2)再拖入一个「数据转换」节点,进入「数据转换」节点。
3)拖入「API输入」算子,调用 2.2 节已发布的 API。如下图所示:
需注意:
Headers 下需要添加参数 Authorization,值为参数 a;将本文 2.3 节签名中的 Body 内容:{\"paging\":{\"pageSize\":10,\"pageNum\":1},\"params\":[]}去掉 \ ,调用 API 时,填入 Body 处。
调试时,参数 a 的值每次使用前都需要重新获取。
4)点击「数据预览」,可看到数据已被取出: