zoukankan      html  css  js  c++  java
  • RESTful API的安全性

    RESTful API的安全性,主要包括三大方面:

    a) 对客户端做身份认证

    b) 对敏感的数据做加密,并且防止篡改

    c) 身份认证之后的授权

    对客户端做身份认证,有几种常见的做法:

    1. 在请求中加签名参数

      为每个接入方分配一个密钥,并且规定一种签名的计算方法。要求接入方的请求中必须加上签名参数。这个做法是最简单的,但是需要确保接入方密 钥的安全保存,另外还要注意防范replay攻击。其优点是容易理解与实现,缺点是需要承担安全保存密钥和定期更新密钥的负担,而且不够灵活,更新密钥和 升级签名算法很困难。

    2. 使用标准的HTTP身份认证机制

      HTTP Basic身份认证安全性较低,必须与HTTPS配合使用。HTTP Digest身份认证可以单独使用,具备中等程度的安全性。

      HTTP Digest身份认证机制还支持插入用户自定义的加密算法,这样可以进一步提高API的安全性。不过插入自定义加密算法在面向互联网的API中用的不是很多。

      这个做法需要确保接入方“安全域-用户名-密码”三元组信息的安全保存,另外还要注意防范replay攻击。

      优点:基于标准,得到了广泛的支持(大量HTTP服务器端、客户端库)。在服务器端做HTTP身份认证的职责可以由Web Server(例如Nginx)、App Server(例如Tomcat)、安全框架(例如Spring Security)来承担,对应用开发者来说是透明的。HTTP身份认证机制(RFC 2617)非常好地体现了“分离关注点”的设计原则,而且保持了操作语义的可见性。

      缺点:这类基于简单用户名+密码机制的安全性不可能高于基于非对称密钥的机制(例如数字证书)。

    3. 使用OAuth协议做身份认证

      OAuth协议适用于为外部应用授权访问本站资源的情况。其中的加密机制与HTTP Digest身份认证相比,安全性更高。需要注意,OAuth身份认证与HTTP Digest身份认证之间并不是相互取代的关系,它们的适用场景是不同的。OAuth协议更适合于为面向最终用户维度的API提供授权,例如获取隶属于用 户的微博信息等等。如果API并不是面向最终用户维度的,例如像七牛云存储这样的存储服务,这并非是OAuth协议的典型适用场景。

    对敏感的数据做加密,并且防止篡改,常见的做法有:

    1. 部署SSL基础设施(即HTTPS),敏感数据的传输全部基于SSL。
    2. 仅对部分敏感数据做加密(例如预付费卡的卡号+密码),并加入某种随机数作为加密盐,以防范数据被篡改。

    身份认证之后的授权,主要是由应用来控制。通常应该实现某种基于角色+用户组的授权机制,这方面的框架有不少(例如Spring Security),不过大多数开发团队还是喜欢自己来实现相关功能。

  • 相关阅读:
    什么是前端开发工程师?
    JS(JavaScript)的深入了解1(更新中···)
    JS(JavaScript)的j进一步了解9(更新中···)
    JS(JavaScript)的进一步了解8(更新中···)
    JS(JavaScript)的进一步了解7(更新中···)
    JS(JavaScript)的进一步了解6(更新中···)
    JS(JavaScript)的进一步了解5(更新中···)
    JS(JavaScript)的进一步了解4(更新中···)
    JS(JavaScript)的进一步了解3(更新中···)
    React:react-router-dom 详解
  • 原文地址:https://www.cnblogs.com/sfce/p/3678895.html
Copyright © 2011-2022 走看看