token

为什么要使用token?

因为HTTP协议是开放的,可以任人调用。所以,如果接口不希望被随意调用,就需要做访问权限的控制,认证是好的用户,才允许调用API。

目前主流的访问权限控制/认证模式

Bearer Token(Token 令牌)

定义:
为了验证API请求者的身份,需要客户端向服务器端提供一个可靠的验证信息,这种信息我们称为Token,这个token通常由Json数据格式组成,通过hash散列算法生成一个字符串,即我们平时所称的Json Web Token(简称JWT)

token主要由3部分组成
头部

头部用于表面这是一个JWT,并指定加密方式,以base64方式进行编码

//头部案例
{

"typ" : "JWT",    (typ:类型)

"alg" : "HS256" (alg:算法,HS256表示哈希算法的mac值。SHA256/HmacSHA256,SHA256表示直接加密,HmacSHA256表示用秘钥进行加密。SHA(Secure) Hash Algorithm ,安全散列算法)

HMAC(Hash Message Authentication  Code,散列消息鉴别码))

}
Claim正文

正文可以包含用户的一些信息,如email、账户、用户名等,同时也包含了token的国旗时间,以unix时间戳的方式记录,以base64进行编码

{
    "user":"iven",
    "exp":265431552,//token过期时间,以毫秒数进行计算
    "content":"web site transfer content"
}
签名(sign)

签名就是把上面两部分进行结合,再加上一些本地信息进行拼接,然后使用头部里面指定的算法进行生成对应的一串字符

token的优点是什么?
1. 无状态性,并且易于拓展(如与其他程序共享权限)
2. 在操作中避免不断的输入账号密码,防止账号密码被窃取
3. 利用token为第三方应用提供权限,而非账号密码,安全性更高
4. 支持跨平台、多语言

应用案例

api签名

场景描述:当你开发完一个接口之后,放到服务器之后有考虑过下面的问题吗?

  1. API对调用者身份进行校验,缺少访问控制,可被随意调用吗
  2. API在权限控制方面未做充分安全设计,权限会被滥用吗
  3. API使用安全的协议了吗,考虑被篡改的情况了吗
  4. API数据交互内容做加密措施了吗
  5. API会被重复调用造成重放攻击吗
  6. 会话做超时设置了吗

解决方案:
对api进行签名(以开放平台为例),具体如下:
1. 为API调用方分配apiKey,apiSecret
2. 为参数签名

 - 参数加入时间戳(timestamp)
 - 对所有需要传输的参数的名称,按照a~z进行升序排序,值为null或空串的参数不参与排序
 - 按排序结果拼接参数值成一个字符串content
 - 对content用SHA256或者是其他JWT token生成算法进行签名,生成apiSign
 - 最终把apiSign加到url最后(位置不定,看与后台规则约定)去请求api

3. 服务端校验
- 服务端获取url中的所有参数
- 检查时间戳是否过期,过期就返回错误,反之下一步
- 验证apiSign,验证不通过就返回错误,反之下一步
- 设置超时
- 允许继续请求

  • 8
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值