前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大厂案例 - 通用的三方接口调用方案设计(下)

大厂案例 - 通用的三方接口调用方案设计(下)

作者头像
小小工匠
发布2024-05-26 13:39:25
1200
发布2024-05-26 13:39:25
举报
文章被收录于专栏:小工匠聊架构小工匠聊架构

Pre

大长案例 - 通用的三方接口调用方案设计(上)

大厂案例 - 通用的三方接口调用方案设计(中)


签名(signature)生成机制

生成签名(signature) 旨在确保请求的完整性、防止篡改和重放攻击。签名的生成主要通过参数排序、拼接和哈希算法来实现。

生成签名的步骤

第1步:参数排序
  • 提取所有参数:从请求中提取所有参数,包括URL查询参数和请求头参数。确保包括appIdtimeStampnonce等。
  • 排除空参数和签名本身:去除值为空的参数以及sign参数本身。
  • 按键名升序排序:将参数按照键名进行升序排序。
第2步:拼接参数名和值
  • 按键值对拼接:将排序后的参数按key1=value1&key2=value2&…的方式拼接成一个字符串。
  • 仅使用原始值:确保使用传输参数的原始值,不能进行处理或编码转换。
第3步:拼接密钥
  • 添加密钥:在拼接后的字符串末尾添加密钥secret。这一步确保签名的唯一性和安全性。
  • 字符串形式:最终拼接得到的字符串形式为key1value1key2value2...secret
第4步:计算签名
  • 哈希算法:使用MD5算法对第3步得到的字符串进行哈希计算。得到的结果应为32位字符串。
  • 转为大写:将计算得到的MD5值转为大写。这是最终的签名sign

示例说明

根据提供的例子,展示具体的签名生成过程。

输入参数

请求URL和请求头:

代码语言:javascript
复制
http://www.xxx.com/openApi?sign=sign_value&k1=v1&k2=v2&method=cancel&k3=&kX=vX

appId: zs001
timeStamp: 1612691221000
nonce: 1234567890
sign: 2B42AAED20E4B2D5BA389F7C344FE91B
第1步:拼接字符串

去除sign参数和空值参数k3,然后按键名升序排序:

代码语言:javascript
复制
appId=zs001&k1=v1&k2=v2&kX=vX&method=cancel&nonce=1234567890&timeStamp=1612691221000
第2步:按键值拼接

将参数名和值拼接成一个字符串:

代码语言:javascript
复制
appIdzs001k1v1k2v2kXvXmethodcancelnonce1234567890timeStamp1612691221000
第3步:拼接密钥

在字符串末尾拼接密钥secret(假设密钥是"artisan"):

代码语言:javascript
复制
appIdzs001k1v1k2v2kXvXmethodcancelnonce1234567890timeStamp1612691221000artisan
第4步:计算MD5并转为大写

计算MD5哈希值,然后转为大写:

代码语言:javascript
复制
MD5("appIdzs001k1v1k2v2kXvXmethodcancelnonce1234567890timeStamp1612691221000artisan") = "ABCDEF"

最终签名sign的值为ABCDEF

注意事项

  • 编码一致性:在计算签名之前,确保调用方和提供方使用相同的编码方式(如UTF-8、GBK等)。
  • 密钥保密:密钥secret需要高度保密,确保签名过程的安全性。
  • 参数完整性:确保签名包含所有关键参数,并且在计算过程中不丢失或篡改。

结语

通过上述步骤,可以生成可靠的签名sign,确保请求的完整性和安全性。在实际应用中,签名的设计需要根据具体业务需求和安全策略进行调整。确保在实现过程中遵循安全最佳实践,并定期审查签名机制的有效性。


Token

Token是用于访问接口的访问令牌,用于标识接口调用者的身份或凭证,以减少用户名和密码的传输次数。通过Token,服务器可以识别请求的来源,并决定是否授权请求。

Token的定义和作用

  • Token: 一般是一个随机生成的唯一标识符,用于标识客户端的访问权限。Token可以是UUID或其他形式的随机字符串。
  • 作用: 凭借Token,客户端可以在不重复传输用户名和密码的情况下访问服务器,服务器通过Token来验证请求的有效性。
  • 安全性: Token的设计需要考虑安全性,确保Token不能被轻易伪造或劫持。

Token的生成和验证

  • 生成Token: 服务器在验证客户端的身份后,生成一个唯一的Token,并将其返回给客户端。服务器通常将Token作为键,将与之关联的信息作为值存储在缓存服务器中(如Redis)。
  • Token的验证: 当客户端发送请求时,服务器检查Token的有效性。如果Token存在且有效,则允许访问;否则,返回错误响应。
  • Token的生命周期: Token通常有一个有效期,过期后需要重新生成。可以通过设置缓存过期时间来控制Token的生命周期。

API Token和USER Token

Token可以分为两种类型:

  • API Token: 用于访问不需要用户登录的接口,如登录、注册、一些基本数据的获取等。通常通过appIdtimestampsign来获取API Token。
  • USER Token: 用于访问需要用户登录的接口,如获取用户信息、保存、修改等。获取USER Token需要提供用户名和密码等认证信息。

Token的安全性

  • Token存储: 客户端通常将Token存储在本地(如内存、文件、或安全存储)。需要确保Token不被泄露。
  • Token劫持: Token被劫持可能导致伪造请求或篡改参数。因此,建议在每个请求中使用额外的签名验证

Token+签名验证

为了增强安全性,可以在使用Token的基础上增加签名验证。这个过程包括:

  • 签名生成: 服务器为客户端分配appSecret,并将其用于生成签名。签名的生成方式与之前讨论的类似,通常包括将所有请求参数和密钥拼接,然后计算哈希值(如MD5)。
  • 签名验证: 服务器在接收到请求后,验证签名的正确性。如果签名验证成功,则允许访问;否则,返回错误。
  • 防止伪造请求: 通过签名验证,可以确保即使Token被劫持,对方也无法伪造请求或篡改参数。

应用场景

  1. 登录和退出: 用户登录后,服务器返回Token,客户端在每次请求时带上Token。退出时,服务器可以使Token失效。
  1. 后续请求: 在后续的请求中,客户端需携带Token,并按照签名规则生成签名值。

客户端: 与前文接口签名规则一样类似,把appId改为token即可。

结语

Token是用于标识客户端身份的访问令牌,可用于验证请求的合法性。通过Token,服务器可以减少用户名和密码的传输,增加接口访问的安全性。结合签名验证,可以进一步确保请求的完整性,防止伪造和篡改

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Pre
  • 签名(signature)生成机制
    • 生成签名的步骤
      • 第1步:参数排序
      • 第2步:拼接参数名和值
      • 第3步:拼接密钥
      • 第4步:计算签名
    • 示例说明
      • 输入参数
      • 第1步:拼接字符串
      • 第2步:按键值拼接
      • 第3步:拼接密钥
      • 第4步:计算MD5并转为大写
    • 注意事项
      • 结语
      • Token
        • Token的定义和作用
          • Token的生成和验证
            • API Token和USER Token
              • Token的安全性
                • Token+签名验证
                  • 应用场景
                    • 结语
                    相关产品与服务
                    云数据库 Redis
                    腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档