作者:魔王不造反

来源:blog.biezhi.me/2019/01/rest-security-basics.html

  • Basic 认证

  • OAuth 2.0

  • OAuth2 + JSON Web 令牌

  • 新玩意:亚马逊签名方式


REST 是一种现代架构风格,它定义了一种设计 Web 服务的新方法。和之前的 HTTP 以及 SOA 不同,它不是一个协议(即:一套严格的规则),而是一些关于 Web 服务应该如何相互通信的一些建议和最佳实践。按照 REST 最佳实践开发的服务被称为 “RESTful Web 服务”。

安全性是 RESTful 服务的基石。启用它的方法之一是尽可能内置用户身份验证和授权机制。

在 RESTful 服务中实现用户身份验证和授权的方法有很多。我们今天要讲的主要方法(或标准)有:

  • Basic 认证

  • OAuth 2.0

  • OAuth 2.0 + JWT

为了让我们的讨论更加具体,假设我们的后端程序有微服务,并且每个用户请求时,必须调用后端的几个服务来返回请求的数据。所以,我们将不仅从安全性问题方面,而且在它们产生的额外流量和服务器负载的背景下检查每个标准。下面开始吧…

Basic 认证

最古老也是最简单的标准。

看起来像: 用户名 + 密码 + Base64(对用户名和密码做哈希的基础算法)。

工作原理: 加入有人尝试登录用户的 Fackbook 账户,去访问他的消息、历史记录、群组信息,这些都是独立的服务。当用户输入用户名和密码后,系统会允许登录。但是,默认情况下,系统不知道用户的角色和权限是什么,他们可以访问哪些服务等等。

所以每次用户尝试访问任何一个服务的时候,系统都应该再次验证是否允许执行这个操作,这意味着需要对身份验证进行额外的调用。就我们的示例中有四个服务而言,在这种情况下,每个用户将有四个额外的调用。

现在假设每秒有 3k 个请求,在 Facebook 的系统中每秒 300k 请求更现实。将这请求乘以四,结果是每秒要向服务器发出 12k 次调用。

Basic认证

总结: 可伸缩性差,大量的额外流量(额外调用)没有带来业务价值,服务器的负载很大。

OAuth 2.0

看起来像: 用户名 + 密码 + 访问令牌 + 过期令牌

工作原理: OAuth 2.0 标准的核心思想是,用户使用用户名和密码登录系统后,客户端(用户访问系统的设备)会收到一对令牌,这是一个访问权限令牌和刷新令牌。

访问令牌用于访问系统中的所有服务。到期后,系统使用刷新令牌生成一对新的令牌。所以,如果用户每天都进入系统,令牌也会每天更新,不需要每次都用用户名和密码登录系统。刷新令牌也有它的过期时间(虽然它比访问令牌长得多),如果一个用户一年没有进入系统,那么很可能会被要求再次输入用户名和密码。

OAuth 2.0 标准取代了基本的身份验证方法,它具有一定的优势,例如用户每次想要进入系统时不用输入用户名和密码。但是,系统仍然需要调用身份验证服务器,就像使用基本身份验证方法时一样,以检查拥有该令牌的用户有权限做什么。

假设有效期是一天。这意味着登录服务器上的负载要少得多,因为用户每天只需要输入一次凭证,而不是每次都要进入系统。但是,系统仍需要验证每个令牌并检查用户角色的存储状态。所以我们最终还要调用身份验证服务器。

OAuth2认证

总结: 和 Basic 验证有相同的问题 - 可伸缩性差,身份验证服务器负载较高。

OAuth2 + JSON Web 令牌

看起来像: 用户名 + 密码 + JSON数据 + Base64 + 私钥 + 到期日期

工作原理: 当用户第一次使用用户名和密码登录系统时,系统不仅会返回一个访问令牌(只是一个字符串),而是一个包含所有用户信息的 JSON 对象,比如角色和权限,使用 Base64 进行编码并使用私钥签名。下图是它在没有编码的情况下的样子:

JWT认证

看起来很可怕,但这确实有效!主要区别在于我们可以在令牌中存储状态,而服务保持无状态。这意味着用户自己拥有自己的信息,不需要额外的调用来检查它,因为所有的内容都在令牌里。这对于减少服务器负载方面是一个很大的优势。这个标准在世界范围内得到广泛应用。

总结: 良好的可伸缩性,可以和微服务一起工作。

新玩意:亚马逊签名方式

一种全新的,奇特的方法,称为 HTTP 签名,亚马逊是目前使用它的大厂之一。

它的思路是,当你创建亚马逊帐户的时候,会生成一个永久的、非常安全的访问令牌,你要非常小心地存储起来并且不要给任何人显示。当你要从 Amazon 请求某些资源时,你可以获取到所有相关的 http 头信息,使用这个私钥对其进行签名,然后将签名的字符串作为 header 发送。

在服务器端,亚马逊也有你的访问密钥。它们接下来做什么?只需要使用你的 http 头信息和这个密钥进行签名。然后将签名字符串和你作为签名的字符串进行比较;如果相同那么就知道你是谁。

最大的好处是你只需要发送一次用户名和密码 - 就可以获得令牌。至于使用私钥签名的 header 信息,基本上没有机会对它们进行编码。就算有人截获了信息——谁在乎呢 ;)

英文原文:https://yellow.systems/blog/rest-security-basics

关注微信公众号:互联网架构师,在后台回复:2T,可以获取我整理的教程,都是干货。

猜你喜欢

1、GitHub 标星 3.2w!史上最全技术人员面试手册!FackBoo发起和总结

2、如何才能成为优秀的架构师?

3、从零开始搭建创业公司后台技术栈

4、程序员一般可以从什么平台接私活?

5、37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...

6、滴滴业务中台构建实践,首次曝光

7、不认命,从10年流水线工人,到谷歌上班的程序媛,一位湖南妹子的励志故事

8、15张图看懂瞎忙和高效的区别

9、2T架构师学习资料干货分享


http://www.taodudu.cc/news/show-1749910.html

相关文章:

  • 牛逼!终于有人开源了一份基于SSM框架实现了支付宝支付功能的完整源代码......
  • MySql 不香了?我们公司为什么放弃MySql选择NewSql?
  • 底层程序员,逆袭!
  • 我敢说,你的登录接口肯定不安全
  • 一次订单号重复引起的事故,把我坑惨了!
  • 来我们公司面试必问的41道 SpringBoot 面试题,不看亏大了!
  • GitHub新神器,宇宙第一编辑器--VS Code!危
  • 经过一年的煎熬,我们还是决定把系统升级成基于 Spring Cloud 的微服务架构
  • 一口气说出8种幂等性解决重复提交的方案,面试官懵了!(附代码)
  • Linux!为何他一人就写出这么强的系统,中国却做不出来?
  • 阿里开源代码质量检测工具!
  • Swagger 3.0 官方 starter 诞生,野生的可以扔了!
  • 独家下载 | 《Redis+Nginx+设计模式+Spring全家桶+Dubbo》,附 PDF 架构书籍 下载
  • 分布式服务的幂等性设计,值得学习!
  • 循序渐进,一文详解微服务架构!
  • Java 8 异步 API、循环、日期,用好提高生产力!
  • Java 8 中的 Map 骚操作,学习下
  • Spring Boot + PageHelper 实现分页,总结得很全了!
  • 面试遇Spark,别怂!
  • Java 会是未来第一编程语言吗?
  • RabbitMQ 线上事故!慌的一批,脑袋一片空白……
  • 本以为用的MyBatis框架就万无一失了,没想到还是被黑客注入了,我真的无语了!...
  • 如何学会阅读源码,看这篇就够了!
  • 你向 MySQL 插入 100万 条数据用了多久?
  • 程序员需知的 58 个网站!个个经典
  • 两年经验拿到蚂蚁/头条 Offer(面经分享)
  • 微信团队分享:微信支付代码重构以及软件架构上的思考
  • Elasticsearch 最佳实践!
  • 太赞了!终于有人把怎么在IDEA中使用Java热部署插件JRebel讲清楚了...
  • 利用Github探测发现特斯拉API请求漏洞

REST API 的安全认证,我放弃OAuth 2.0 ,选择 JWT 令牌相关推荐

  1. 微软认证授权服务器,oauth 2.0到微软认证服务器

    需要格式化令牌请求的帮助.我搜索了一遍,看了很多文档.提琴手的回应是关于"grant_type"的大喊,但它包括在内.oauth 2.0到微软认证服务器 POST http://l ...

  2. 搭建认证服务器 - Spring Security Oauth2.0 集成 Jwt 之 【密码认证流程】 总结

    在搭建介绍流程之前,确保您已经搭建了一个 Eureka 注册中心,因为没有注册中心的话会报错(也有可能我搭建的认证服务器是我项目的一个子模块的原因):Request execution error. ...

  3. 搭建认证服务器 - Spring Security Oauth2.0 集成 Jwt 之 【授权码认证流程】 总结

    在搭建介绍流程之前,确保您已经搭建了一个 Eureka 注册中心,因为没有注册中心的话会报错(也有可能我搭建的认证服务器是我项目的一个子模块的原因):Request execution error. ...

  4. python调用api做用户登录认证_(二)Python调用Zabbix api之从入门到放弃——登录并获取身份验证令牌...

    x.x.x.x可能是你的IP或者域名 访问流程概览: 1.首先登录 2.认证成功后zabbix server返回一个token 3.带着这个token去访问各种数据,做各种操作 4.完毕! 一.用RE ...

  5. jwt token注销_【原创精选】OAuth 2.0+JWT+spring security完成认证授权-生产级-附带源码...

    前言导读 分析一下为什么要用OAuth2和JWT来做 1. **单点登录(SSO)**方案单击登录方案是最常见的解决方案,但单点登录需要每个与用户交互的服务都必须与认证服务进行通信,这不但会造成重复, ...

  6. 使用OAuth 2.0访问Google API

    参考: https://developers.google.com/identity/protocols/oauth2 使用OAuth 2.0访问Google API 注意:使用Google的OAut ...

  7. OpenID Connect:OAuth 2.0协议之上的简单身份层

    OpenID Connect是什么?OpenID Connect(目前版本是1.0)是OAuth 2.0协议(可参考本人此篇:OAuth 2.0 / RCF6749 协议解读)之上的简单身份层,用 A ...

  8. 8. Spring Security 5.1之 OAuth 2.0 Login

    1.OAuth 2.0 Login OAuth 2.0登录功能为应用程序提供了使用OAuth 2.0提供程序(例如GitHub)或OpenID Connect 1.0提供程序(例如Google)上的现 ...

  9. 详解OAuth 2.0授权协议(Bearer token)

    OAuth 2.0授权协议 1 认证(Authentication) 2 授权(Authorization) 3 OAuth 2.0与认证机制的联系 4 详解OAuth 2.0授权协议 4.1 授权码 ...

  10. OAuth 2.0: Bearer Token Usage

    Bearer Token (RFC 6750) 用于OAuth 2.0授权访问资源,任何Bearer持有者都可以无差别地用它来访问相关的资源,而无需证明持有加密key.一个Bearer代表授权范围.有 ...

最新文章

  1. 另一种同步软件Unison的使用方法
  2. JDB2导致磁盘io使用率高
  3. unity and MySql
  4. LoadRunner脚本篇
  5. CF364B. Free Market
  6. java中字符串函数_JAVA中字符串函数subString的用法小结
  7. 简单说说驱动程序设计的入门
  8. 持续交付 devops_使用DevOps开始加速软件交付
  9. 大工18春计算机文化基础在线测试1,大工18春《计算机文化基础》在线测试1(满分答案)...
  10. java -为什么重写equals(),还需要重写hashCode()?
  11. 做生意,没亏过钱,自然也没赚过钱
  12. Spring中@Autowired注解的工作原理
  13. photoshop Mac版本安装
  14. x58服务器主板装win7系统,技嘉Z390主板重装win7方法|Z390主板Bios设置及安装win7图文教程...
  15. windows_删除多余网络适配器(删除/卸载多余网卡)/删除TAP虚拟网卡NIC
  16. 留学Assignment写作要注意逻辑谬误
  17. stm32f103呼吸灯(PWM脉冲宽度调制)
  18. iOS 程序员、架构师、技术经理、技术总监和CTO有啥区别?
  19. 关于Web的欢迎页面的开发设置
  20. python日历节日表_python日历模块_Python日历模块| calendar()方法与示例

热门文章

  1. GitHub 被指审查内容,著名“换脸”开源项目 deepfake 遭限制访问
  2. 达梦数据库存储过程调用
  3. VMware安装CentOS过程(初学linux)
  4. Golang的聊天服务器实践(群聊,广播)(一)
  5. Lucene知识小总结8:索引查询
  6. Spark函数讲解: combineByKey
  7. 毕业后半年就变成了一条“狗
  8. 一串数字中有两个只出现一次的数字其余都是成对相同,求这两个数
  9. Illustrator中文版教程,如何在 Illustrator 中添加文字?
  10. Millumin for Mac视频实时编辑软件