zoukankan      html  css  js  c++  java
  • APP开放接口API安全性——Token令牌Sign签名的设计与实现

      在APP开放接口API的设计中,避免不了的就是安全性问题。

      一、https协议

      对于一些敏感的API接口,需要使用https协议。https是在http超文本传输协议加入SSL层,它在网络间通信是加密的,所以需要加密证书。

      二、设计签名

      原理:用户登录时向服务器提供用户认证信息(如账号和密码),服务器认证完后给客户端返回一个Token令牌,用户再次获取信息时,需带上此令牌。如果令牌正确,则返回数据。

      对于获得Token令牌信息后,访问用户相关接口,客户端请求的url需要带上如下参数:

      时间戳:timestamp

      Token令牌:token

      Sign签名:sign

      Sign生成规则可以是:将所有用户请求的参数按照字母排序(包括timestamp、token),然后根据MD5(可以加点salt),全部大写,生成sign签名,这就是所说的url签名算法。

      然后登陆后每次调用用户信息时,带上sign、timestamp、token参数。

      三、具体实现

      1、客户端向服务器端发送用户认证信息(如用户名和密码),服务器端接收到请求后,验证用户信息是否正确。

      如果正确:则返回一个唯一不重复的字符串(一般为UUID),然后在Redis中维护Token——Uid的用户信息关系,以便其他API对token验证。

      如果错误:则返回错误代码。

      2、服务器设计一个url请求拦截规则

      (a)、判断是否包含timestamp、token、sign参数,如果不含或缺少,则返回错误代码。

      (b)、判断服务器接到请求的时间和参数中的时间戳(timestamp)是否相差很长一段时间(时间自定义如半小时),如果超过则说明该url已经过期(如果url被盗,他改变了时间戳,但是会导致sign签名不相等)。

      (c)、判断token是否有效,根据请求过来的token,查询Redis缓存中的Uid,如果获取不到这说明token已过期。

      (d)、根据用户请求的url参数,服务器端按照同样的规则生成sign签名,对比签名是否相等,如果相等,则放行。(自然url签名,也无法100%保证其安全,也可以通过公钥AES对数据和url加密,但这样无法确保公钥丢失,所以签名只是很大程度上保证安全)。

      (e)、此url拦截只需对获取身份认证的url放行(如登录url),其他所有的url都需要拦截。

  • 相关阅读:
    SqlCacheDependency [转]
    C#导出Word [ZT]
    ADO.NET Entity Framework 学习(1) [ZT]
    AJAX, JSON.js,Newtonsoft.Json.dll,nunit.framework.dll 源代码
    ADO.NET 1.1和2.0事务的区别
    Sql Server 2000 中游标的使用示例 [ZT]
    如何检测是否安装了.NET 2.0和.NET 3.0 [ZT]
    ORACLE 常用函数 [ZT]
    Resource 学习笔记
    GridView 双击选择行 [ZT]
  • 原文地址:https://www.cnblogs.com/zhouguowei/p/9772280.html
Copyright © 2011-2022 走看看