当前位置:网站首页>OAuth2和JWT
OAuth2和JWT
2022-07-26 00:29:00 【Minor王智】
目录
1.OAuth2授权框架
OAuth是Open Authorization授权协议的简称,它是一个开放网络标准,目的是让用户授权第三方应用将个人数据提供给另外的应用程序,而无需将个人极为敏感的例如密码等数据暴露给另外的应用程序。目前主流的版本是OAuth2。
- 特点:设计简单、支持多种授权模式、安全性较高、协议开放自由实现。
- 应用场景:需要集成第三方授权登录的场景,例如用微信、支付宝快速登录功能。
2.OAuth2授权模式
2.1 授权码模式(见后文)
2.2 密码模式
这种模式需要让用户将自己的账户密码暴露给三方应用,这种模式并不安全,虽然属于RFC规范,但是这种场景必须得高度信任这个应用,例如著名权威公司等。
1. 用户向应用客户端暴露自己的用户名、密码。
1. 应用客户端将用户名和密码发送给授权服务器,授权服务器校验并返回令牌。
2.3 简化模式
这种模式使用较少,一般出现在没有服务端的应用,纯前端的应用架构。这种模式浏览器直接向授权服务器申请令牌,令牌直接保存在前端,安全性不高,所以只适合一些安全性不高的场景。
2.4 客户端模式
这种模式抛弃了用户的概念,客户端以自己的名义发起授权请求,这种模式适用于命令行的一些基础应用。
3.OAuth2授权码模式
授权码模式是相对比较安全的一种授权模式,也是应用最广泛的一种模式。这种模式需要客户端、服务端、三方服务器共同协调完成,这种模式需要三方应用客户端通过授权得到一个Code码,客户端拿着这个code请求自己公司的服务端,服务器通过code去三方应用获取一个Access_Token,得到三方的Access_Token以后,服务器就可以调用API获取用户的一些非敏感信息了,例如可以拿到用户的头像、用户名、账号ID、open_id、union_id等。举个微信授权登录的场景:
- 用户进入我司A应用,用户点击“使用微信登录”,客户端唤起微信授权界面。
- 界面展示“是否在A应用登录微信账户”,页面等待用户点击确认授权。
- 用户点击同意,那么微信后台就会给A应用的客户端一个Code码,或者通过跳转重定向页面在url上带上这个Code码给客户端。
- 客户端将这个Code码发给我司的Java服务器,Java端将Code码、微信应用秘钥等参数,向微信后台发起API调用,拿到
Access_Token,此时服务器就已经知道这个用户是谁,就可以给用户颁发自己应用的Token了,也可以拿着这个access_token去微信获取用户信息等。 - 用户在客户端的操作,客户端请求Java服务器的API就会在
Authorization的Header里面带上这个Token。

3.1 令牌的刷新
令牌为了安全考虑,一般会有一个时间不长的过期时间,例如2小时等。如果让用户重新走一遍流程虽然这样更安全,但是比较麻烦。所以,一般授权服务器在返回令牌的时候会同时返回两个令牌,一个用于获取用户数据,另一个负责刷新这个access_token,名字一般叫Refresh_Token。
4.JWT
JSON Web Token的简称,它是一个RFC 7519开放标准,特点是简介、通过JSON数据格式包装对象信息、安全性高、防篡改。
JWT由三部分组成:
- header头部:描述JWT的基本信息(也是一个JSON),例如类型、签名算法,例如RSA、SHA256等,然后进行Base64加密形成一段字符串。
- payload载荷内容:也是一个JSON格式,存放Token里面的核心信息,例如用户信息、过期时间等。然后进行Base64加密形成一段字符串。
- signature签名:将header和payload通过base64加密以后的文本再组合
secret私钥和header头里面记录的加密算法进行整体加密,得到一个字符串。注意,这个secret一定要保存在服务端。
4.1 JJWT
JWT的Java支持工具库,只需要Maven引入,开箱即用。通过Jwts.builder来生成Token。通过Jwts.parser来解析Token。
边栏推荐
- Preparation of bovine serum albumin modified by low molecular weight protamine lmwp/peg-1900 on the surface of albumin nanoparticles
- 向左旋转k个字符串(细节)
- The way to understand JS: six common inheritance methods of JS
- DC-6--vulnhub靶场
- Nodejs surface longitude
- 数据流通交易场景下数据质量综合管理体系与技术框架研究
- 基于MFFMB的电商评论文本分类研究
- How to use 120 lines of code to realize an interactive and complete drag and drop upload component?
- 基于数据要素流通视角的数据溯源研究进展
- TID-MOP:面向数据交易所场景下的安全管控综合框架
猜你喜欢
随机推荐
Hefei approved in advance
Understanding of "dbdnet: a deep boosting strategy for imagedenoising"
基于网络分析和文本挖掘的意见领袖影响力研究
Leetcode 笔记 121. 买卖股票的最佳时机
Research on visualization method of technology topic map based on clustering information
Flask发送验证码逻辑
Redis夺命十二问,你能扛到第几问?
Trial division -- power of 3
Verilog grammar basics HDL bits training 05
实战演练 | 查找在给定时间范围内购买超过 N 件商品的客户
找出单身狗(力扣260)
使用LocalDate类完成日历设计
【oops-framework】界面管理
Leetcode 笔记 20. 有效的括号
Nodejs starts mqtt service with an error schemaerror: expected 'schema' to be an object or Boolean problem solving
Research on the integrated data quality management system and technical framework under the scenario of data circulation and transaction
Private cloud disk setup
JVM Tri Color marking and read-write barrier
Redis命令参考手册 - Key
Nest. JS uses express but not completely









