REST API 的安全认证,我放弃OAuth 2.0 ,选择 JWT 令牌
作者:魔王不造反
来源: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 次调用。
总结: 可伸缩性差,大量的额外流量(额外调用)没有带来业务价值,服务器的负载很大。
OAuth 2.0
看起来像: 用户名 + 密码 + 访问令牌 + 过期令牌
工作原理: OAuth 2.0 标准的核心思想是,用户使用用户名和密码登录系统后,客户端(用户访问系统的设备)会收到一对令牌,这是一个访问权限令牌和刷新令牌。
访问令牌用于访问系统中的所有服务。到期后,系统使用刷新令牌生成一对新的令牌。所以,如果用户每天都进入系统,令牌也会每天更新,不需要每次都用用户名和密码登录系统。刷新令牌也有它的过期时间(虽然它比访问令牌长得多),如果一个用户一年没有进入系统,那么很可能会被要求再次输入用户名和密码。
OAuth 2.0 标准取代了基本的身份验证方法,它具有一定的优势,例如用户每次想要进入系统时不用输入用户名和密码。但是,系统仍然需要调用身份验证服务器,就像使用基本身份验证方法时一样,以检查拥有该令牌的用户有权限做什么。
假设有效期是一天。这意味着登录服务器上的负载要少得多,因为用户每天只需要输入一次凭证,而不是每次都要进入系统。但是,系统仍需要验证每个令牌并检查用户角色的存储状态。所以我们最终还要调用身份验证服务器。
总结: 和 Basic 验证有相同的问题 - 可伸缩性差,身份验证服务器负载较高。
OAuth2 + JSON Web 令牌
看起来像: 用户名 + 密码 + JSON数据 + Base64 + 私钥 + 到期日期
工作原理: 当用户第一次使用用户名和密码登录系统时,系统不仅会返回一个访问令牌(只是一个字符串),而是一个包含所有用户信息的 JSON 对象,比如角色和权限,使用 Base64 进行编码并使用私钥签名。下图是它在没有编码的情况下的样子:
看起来很可怕,但这确实有效!主要区别在于我们可以在令牌中存储状态,而服务保持无状态。这意味着用户自己拥有自己的信息,不需要额外的调用来检查它,因为所有的内容都在令牌里。这对于减少服务器负载方面是一个很大的优势。这个标准在世界范围内得到广泛应用。
总结: 良好的可伸缩性,可以和微服务一起工作。
新玩意:亚马逊签名方式
一种全新的,奇特的方法,称为 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 令牌相关推荐
- 微软认证授权服务器,oauth 2.0到微软认证服务器
需要格式化令牌请求的帮助.我搜索了一遍,看了很多文档.提琴手的回应是关于"grant_type"的大喊,但它包括在内.oauth 2.0到微软认证服务器 POST http://l ...
- 搭建认证服务器 - Spring Security Oauth2.0 集成 Jwt 之 【密码认证流程】 总结
在搭建介绍流程之前,确保您已经搭建了一个 Eureka 注册中心,因为没有注册中心的话会报错(也有可能我搭建的认证服务器是我项目的一个子模块的原因):Request execution error. ...
- 搭建认证服务器 - Spring Security Oauth2.0 集成 Jwt 之 【授权码认证流程】 总结
在搭建介绍流程之前,确保您已经搭建了一个 Eureka 注册中心,因为没有注册中心的话会报错(也有可能我搭建的认证服务器是我项目的一个子模块的原因):Request execution error. ...
- python调用api做用户登录认证_(二)Python调用Zabbix api之从入门到放弃——登录并获取身份验证令牌...
x.x.x.x可能是你的IP或者域名 访问流程概览: 1.首先登录 2.认证成功后zabbix server返回一个token 3.带着这个token去访问各种数据,做各种操作 4.完毕! 一.用RE ...
- jwt token注销_【原创精选】OAuth 2.0+JWT+spring security完成认证授权-生产级-附带源码...
前言导读 分析一下为什么要用OAuth2和JWT来做 1. **单点登录(SSO)**方案单击登录方案是最常见的解决方案,但单点登录需要每个与用户交互的服务都必须与认证服务进行通信,这不但会造成重复, ...
- 使用OAuth 2.0访问Google API
参考: https://developers.google.com/identity/protocols/oauth2 使用OAuth 2.0访问Google API 注意:使用Google的OAut ...
- OpenID Connect:OAuth 2.0协议之上的简单身份层
OpenID Connect是什么?OpenID Connect(目前版本是1.0)是OAuth 2.0协议(可参考本人此篇:OAuth 2.0 / RCF6749 协议解读)之上的简单身份层,用 A ...
- 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)上的现 ...
- 详解OAuth 2.0授权协议(Bearer token)
OAuth 2.0授权协议 1 认证(Authentication) 2 授权(Authorization) 3 OAuth 2.0与认证机制的联系 4 详解OAuth 2.0授权协议 4.1 授权码 ...
- OAuth 2.0: Bearer Token Usage
Bearer Token (RFC 6750) 用于OAuth 2.0授权访问资源,任何Bearer持有者都可以无差别地用它来访问相关的资源,而无需证明持有加密key.一个Bearer代表授权范围.有 ...
最新文章
- 另一种同步软件Unison的使用方法
- JDB2导致磁盘io使用率高
- unity and MySql
- LoadRunner脚本篇
- CF364B. Free Market
- java中字符串函数_JAVA中字符串函数subString的用法小结
- 简单说说驱动程序设计的入门
- 持续交付 devops_使用DevOps开始加速软件交付
- 大工18春计算机文化基础在线测试1,大工18春《计算机文化基础》在线测试1(满分答案)...
- java -为什么重写equals(),还需要重写hashCode()?
- 做生意,没亏过钱,自然也没赚过钱
- Spring中@Autowired注解的工作原理
- photoshop Mac版本安装
- x58服务器主板装win7系统,技嘉Z390主板重装win7方法|Z390主板Bios设置及安装win7图文教程...
- windows_删除多余网络适配器(删除/卸载多余网卡)/删除TAP虚拟网卡NIC
- 留学Assignment写作要注意逻辑谬误
- stm32f103呼吸灯(PWM脉冲宽度调制)
- iOS 程序员、架构师、技术经理、技术总监和CTO有啥区别?
- 关于Web的欢迎页面的开发设置
- python日历节日表_python日历模块_Python日历模块| calendar()方法与示例
热门文章
- GitHub 被指审查内容,著名“换脸”开源项目 deepfake 遭限制访问
- 达梦数据库存储过程调用
- VMware安装CentOS过程(初学linux)
- Golang的聊天服务器实践(群聊,广播)(一)
- Lucene知识小总结8:索引查询
- Spark函数讲解: combineByKey
- 毕业后半年就变成了一条“狗
- 一串数字中有两个只出现一次的数字其余都是成对相同,求这两个数
- Illustrator中文版教程,如何在 Illustrator 中添加文字?
- Millumin for Mac视频实时编辑软件