API安全接口安全设计

Posted by 麦子 on Monday, 2020年07月06日

[TOC]

转载地址:https://blog.csdn.net/zhou920786312/article/details/95536556

如何保证外网开放接口的安全性

  1. 使用加签名方式,防止数据篡改
  2. 信息加密与密钥管理
  3. 搭建OAuth2.0认证授权
  4. 使用令牌方式
  5. 搭建网关实现黑名单和白名单

一. 令牌方式搭建搭建API开放平台

20190711234839811

方案设计:

  1. 第三方机构申请一个appId,通过appId去获取accessToken,每次请求获取accessToken都要把老的accessToken删掉
  2. 第三方机构请求数据需要加上accessToken参数,每次业务处理中心执行业务前,先去dba持久层查看accessToken是否存在(可以把accessToken放到redis中,这样有个过期时间的效果),存在就说明这个机构是合法,无需要登录就可以请求业务数据。不存在说明这个机构是非法的,不返回业务数据。
  3. 好处:无状态设计,每次请求保证都是在我们持久层保存的机构的请求,如果有人盗用我们accessToken,可以重新申请一个新的taken.

二. 基于OAuth2.0协议方式

原理

第三方授权,原理和1的令牌方式一样

  1. 假设我是服务提供者A,我有开发接口,外部机构B请求A的接口必须申请自己的appid(B机构id)
  2. 当B要调用A接口查某个用户信息的时候,需要对应用户授权,告诉A,我愿同意把我的信息告诉B,A生产一个授权token给B。
  3. B使用token获取某个用户的信息。

联合微信登录总体处理流程

  1. 用户同意授权,获取code
  2. 通过code换取网页授权access_token
  3. 通过access_token获取用户openId
  4. 通过openId获取用户信息

三. 信息加密与密钥管理

  1. 单向散列加密
  2. 对称加密
  3. 非对称加密
  4. 安全密钥管理

非对称加密

非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。

公钥与私钥是一对

  1. 公钥对数据进行加密,只有用对应的私钥才能解密
  2. 私钥对数据进行加密,只有用对应的公钥才能解密

过程:

  1. 甲方生成一对密钥,并将公钥公开,乙方使用该甲方的公钥对机密信息进行加密后再发送给甲方;
  2. 甲方用自己私钥对加密后的信息进行解密。
  3. 甲方想要回复乙方时,使用乙方的公钥对数据进行加密
  4. 乙方使用自己的私钥来进行解密。

甲方只能用其私钥解密由其公钥加密后的任何信息。

特点:

  1. 算法强度复杂
  2. 保密性比较好
  3. 加密解密速度没有对称加密解密的速度快。
  4. 对称密码体制中只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。所以保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了。这样安全性就大了很多
  5. 适用于:金融,支付领域

四. 使用加签名方式,防止数据篡改

  1. 客户端:请求的数据分为2部分(业务参数,签名参数),签名参数=md5(业务参数)
  2. 服务端: 验证md5(业务参数)是否与签名参数相同

「真诚赞赏,手留余香」

真诚赞赏,手留余香

使用微信扫描二维码完成支付