作者:魔王不造反REST 是一种现代架构风格,它定义了一种设计 Web 服务的新方法 。和之前的 HTTP 以及 SOA 不同,它不是一个协议(即:一套严格的规则),而是一些关于 Web 服务应该如何相互通信的一些建议和最佳实践 。按照 REST 最佳实践开发的服务被称为 “RESTful Web 服务” 。
来源:blog.biezhi.me/2019/01/rest-security-basics.html
安全性是 RESTful 服务的基石 。启用它的方法之一是尽可能内置用户身份验证和授权机制 。
在 RESTful 服务中实现用户身份验证和授权的方法有很多 。我们今天要讲的主要方法(或标准)有:
- Basic 认证
- OAuth 2.0
- OAuth 2.0 + JWT
Basic 认证最古老也是最简单的标准 。
看起来像: 用户名 + 密码 + Base64(对用户名和密码做哈希的基础算法) 。
工作原理:加入有人尝试登录用户的 Fackbook 账户,去访问他的消息、历史记录、群组信息,这些都是独立的服务 。当用户输入用户名和密码后,系统会允许登录 。但是,默认情况下,系统不知道用户的角色和权限是什么,他们可以访问哪些服务等等 。
所以每次用户尝试访问任何一个服务的时候,系统都应该再次验证是否允许执行这个操作,这意味着需要对身份验证进行额外的调用 。就我们的示例中有四个服务而言,在这种情况下,每个用户将有四个额外的调用 。
现在假设每秒有 3k 个请求,在 Facebook 的系统中每秒 300k 请求更现实 。将这请求乘以四,结果是每秒要向服务器发出 12k 次调用 。
![REST API 的安全基础](http://img.jiangsulong.com/220410/1QAa3a-0.jpg)
文章插图
总结:可伸缩性差,大量的额外流量(额外调用)没有带来业务价值,服务器的负载很大 。
OAuth 2.0看起来像:用户名 + 密码 + 访问令牌 + 过期令牌
工作原理:OAuth 2.0 标准的核心思想是,用户使用用户名和密码登录系统后,客户端(用户访问系统的设备)会收到一对令牌,这是一个访问权限令牌和刷新令牌 。
访问令牌用于访问系统中的所有服务 。到期后,系统使用刷新令牌生成一对新的令牌 。所以,如果用户每天都进入系统,令牌也会每天更新,不需要每次都用用户名和密码登录系统 。刷新令牌也有它的过期时间(虽然它比访问令牌长得多),如果一个用户一年没有进入系统,那么很可能会被要求再次输入用户名和密码 。
OAuth 2.0 标准取代了基本的身份验证方法,它具有一定的优势,例如用户每次想要进入系统时不用输入用户名和密码 。但是,系统仍然需要调用身份验证服务器,就像使用基本身份验证方法时一样,以检查拥有该令牌的用户有权限做什么 。
假设有效期是一天 。这意味着登录服务器上的负载要少得多,因为用户每天只需要输入一次凭证,而不是每次都要进入系统 。但是,系统仍需要验证每个令牌并检查用户角色的存储状态 。所以我们最终还要调用身份验证服务器 。
![REST API 的安全基础](http://img.jiangsulong.com/220410/1QAa406-1.jpg)
文章插图
总结:和 Basic 验证有相同的问题 - 可伸缩性差,身份验证服务器负载较高 。
OAuth2 + JSON Web 令牌看起来像:用户名 + 密码 + JSON数据 + Base64 + 私钥 + 到期日期
工作原理:当用户第一次使用用户名和密码登录系统时,系统不仅会返回一个访问令牌(只是一个字符串),而是一个包含所有用户信息的 JSON 对象,比如角色和权限,使用 Base64 进行编码并使用私钥签名 。下图是它在没有编码的情况下的样子:
![REST API 的安全基础](http://img.jiangsulong.com/220410/1QAa463-2.jpg)
文章插图
看起来很可怕,但这确实有效!主要区别在于我们可以在令牌中存储状态,而服务保持无状态 。这意味着用户自己拥有自己的信息,不需要额外的调用来检查它,因为所有的内容都在令牌里 。这对于减少服务器负载方面是一个很大的优势 。这个标准在世界范围内得到广泛应用 。
【REST API 的安全基础】总结:良好的可伸缩性,可以和微服务一起工作 。
新玩意:亚马逊签名方式一种全新的,奇特的方法,称为 HTTP 签名,亚马逊是目前使用它的大厂之一 。
推荐阅读
- 常吃烧烤 最好喝温茶
- 独具特色的云南民族茶文化浅说
- 漫说开元年间密法与茶俗的邂逅
- 酥炸鱿鱼
- 扇贝烧豆腐
- 红烧小螃蟹
- 电烤箱烤鱼
- 手机千牛开店步骤 手机千牛的经营功能怎么添加
- 一个男子为了一个十七岁的女孩 七岁女孩子
- 有人有阴阳眼是真的吗 阴阳眼是什么样的