1

签名认证机制

1.设置key密钥。
2.假设参数 appid:wx930ea5d5a258f4f much_id:10000100 device_info:1000 body:test nonce_str:iabuaiVckJ按照参数名ASCII字典排序。
StringA="appid=wx930ea5d5a258f4f&body=test&device_info=1000&much_id=10000010&nonce_str=iabuaiVckJ";
3.拼接API密钥。
stringSignTemp="stringA&key=192006250b4c09247ec02edce69f6a2d";sign=MD5(stringSignTemp).toUpperCase()="9A0A8659F005D6984697E2CA0A9CF3B7";

HTTP证书认证


HTTPS由HTTP+SSL组成,公钥私钥相当于钥匙和锁头,你可以把锁头给别人,别人可以用这个锁头把重要的东西锁起来,发给你,只有你有钥匙去打开锁看到里面的东西。

  1. 客户端发起HTTPS请求。

  2. 服务端配置。

  3. 传送公钥。

  4. 客户端解析证书,如果有异常,则弹出一个警告框,提示证书有问题,如果没有问题,则生成一个随机值(对称密钥),用证书对随机值加密。

  5. 传送加密信息,其实就是让服务器端得到这个随机值。

  6. 服务器端用私钥解密,得到随机值,然后私钥对称加密。

  7. 传输加密后的信息。

  8. 客户端解密信息。客户端用私钥还原内容。

总结:
服务器 用RSA生成公钥和私钥,把公钥放在证书里发送给客户端,私钥自己保存。
客户端首先向一个权威的服务器检查证书的合法性,如果证书合法,客户端产生一段随机数,这个随机数就作为通信的密钥,我们称之为对称密钥,用公钥加密这段随机数,然后发送到服务器,服务器用密钥解密获取对称密钥,然后,双方就已对称密钥进行加密解密通信了。

Oauth 2.0 认证

用户登录第三方网站,该网站又想获得另外一个服务商的信息(图片,文件),但是服务商又不想提供用户名密码给第三方网站。

  1. 第三方网站向服务商请求一个未授权的临时令牌code。

  2. 服务商验证第三方网站的身份后,授予一个未授权的临时的令牌(大概10分钟)。

  3. 第三方网站获得未授权的临时令牌后,将用户导向服务商的授权页面请求用户授权,将未授权的临时令牌和第三方网站的返回地址发给服务商。

  4. 用户在服务商的授权页面输入自己的用户名和密码。

  5. 授权成功后,服务商将用户导向第三方网站,并且返回已授权的临时令牌。

  6. 第三方网站根据已授权的临时令牌从服务商那里获得具有访问权限的令牌accessToken。

  7. 第三方网站使用获取到的访问令牌accseeToken可以访问服务商的用户资源。

授权模式

  • 授权码模式

  • 简化模式

  • 密码模式

  • 客户端模式

API接口频率限制

例子:
系统API接口日均调用次数预计1亿,提供5台服务器
单IP,单应用每小时调用次数不超过10000次
单应用,单用户,单接口每小时调用次数不超过1000次

系统吞吐量(系统每秒能处理的请求数)

80% 1亿 / (24小时 60 分钟 60秒 40% * 5) = 4630tps
80%,40% 是指一天中有80%的请求发生在40%的时间里

简单设计

数据结构
k(app_id,ip) => v(count,startTime,lastTime)
k(app_id,uid,interface_id) => v(count,startTime,lastTime)

startTime是第一次调用发生的时刻,lastTime是最近一次调用发生的时刻,精确到秒级。

假设应用也有1万个,平均每个应用的用户数为10万个 ,接口数为50,独立访问IP地址为100万,那么数据项总和为:

1万100万 +1万10万*50 = 600亿

接口安全

  • 注入攻击

  • 失效的身份和会话管理

  • XSS

  • 不安全的直接对象引用
    暴露一个文件,目录,数据密钥

  • 安全配置错误

<security-constraint>  <http-method>  

http-method里的方法是要进行安全限制的,如果只写了POST,GET,那么黑客可以利用HEAD和PUT等其他方法进行攻击。

  • 敏感信息泄露
    携程安全支付日志可遍历下载

  • SQL注入
    虾米网2013年

  • 功能级访问控制缺失

  • 跨站请求伪造(CSRF)
    支付宝flash xss rookit攻击

  • 未授权访问/权限绕过
    2014年搜狗后台管理系统

  • 账户体系控制不严/越权操作
    乐视网 修改uid登录任意用户

  • 使用含有已知漏洞的组件

  • 未验证的重定向和转发

  • 引用不安全的第三方应用
    结果:获取服务器敏感信息

淘宝网主站2014年4月,针对opnessl heartbeat,发送攻击数据包,不需要任何身份验证或者授权,可以从服务器内存读到最多64kb数据,这些数据包括用户登录的cookie,密码明文,可能泄露私钥。
方法:升级最新版本。

  • 系统错误/逻辑缺陷带来的暴力猜想
    2013年京东商城,重置任意用户密码

弱口令猜想

  • 内部重要资料/文档外泄
    淘宝往上传到百度网盘


感谢您的耐心阅读,如果您发现文章中有一些没表述清楚的,或者是不对的地方,请给我留言,您的鼓励是作者写作最大的动力,
如果您认为本文质量不错,读后觉得收获很大,不妨请我喝杯咖啡,让我更有动力继续写出高质量的文章。

  • 支付宝

  • 微信

作 者 : @mousycoder

原文出处 : http://mousycoder.com/2016/02/22/api-authentication/

创作时间:2016-2-22

更新时间:2016-2-22


mousycoder
5.4k 声望819 粉丝