当前位置: 首页 > article >正文

单点登录2,jwt与aAuth2.0区别,二者怎么结合起来工作的,完整流程是什么

JWT(JSON Web Token) 和 OAuth 2.0 是两种不同的技术,但它们可以结合使用来实现安全的身份验证和授权。以下是它们的区别、结合方式以及完整的工作流程。


1. JWT 和 OAuth 2.0 的区别

特性JWTOAuth 2.0
定义一种紧凑的、自包含的令牌格式,用于安全传输信息。一种授权框架,用于第三方应用访问用户资源。
用途身份验证、信息交换。授权第三方应用访问用户资源。
数据结构JSON 格式,包含头部、载荷和签名。无固定格式,通常使用令牌(如 Bearer Token)。
自包含性是,包含所有必要信息。否,依赖授权服务器验证令牌。
有效期可设置有效期。依赖授权服务器的令牌管理。

2. JWT 和 OAuth 2.0 的结合

OAuth 2.0 是一种授权框架,而 JWT 是一种令牌格式。OAuth 2.0 可以使用 JWT 作为令牌的实现方式,从而增强安全性和灵活性。

2.1 结合的优势
  • 自包含性:JWT 包含所有必要信息,减少对授权服务器的依赖。

  • 安全性:JWT 使用签名或加密,防止篡改和伪造。

  • 灵活性:JWT 可以包含自定义的声明(Claims),满足不同业务需求。


3. 结合 JWT 和 OAuth 2.0 的完整流程

以下是结合 JWT 和 OAuth 2.0 的完整工作流程(以授权码模式为例):

3.1 用户授权
  1. 用户访问客户端应用

    • 用户访问客户端应用,客户端应用需要访问用户的资源。

  2. 重定向到授权服务器

    • 客户端应用将用户重定向到授权服务器的授权端点,附带以下参数:

      • client_id:客户端 ID。

      • redirect_uri:回调地址。

      • response_type:响应类型(如 code)。

      • scope:请求的权限范围。

      • state:随机字符串,用于防止 CSRF 攻击。

    复制

    https://auth.example.com/authorize?client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE
  3. 用户登录并授权

    • 用户在授权服务器上登录并同意授权。

3.2 获取授权码
  1. 授权服务器重定向回客户端

    • 授权服务器将用户重定向回客户端应用,附带授权码 code 和 state 参数。

    复制

    https://client.example.com/callback?code=AUTHORIZATION_CODE&state=STATE
  2. 客户端验证 state

    • 客户端验证 state 参数,防止 CSRF 攻击。

3.3 获取访问令牌
  1. 客户端请求访问令牌

    • 客户端向授权服务器的令牌端点发送请求,附带以下参数:

      • grant_type:授权类型(如 authorization_code)。

      • code:授权码。

      • redirect_uri:回调地址。

      • client_id:客户端 ID。

      • client_secret:客户端密钥。

    bash

    复制

    POST /token HTTP/1.1
    Host: auth.example.com
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=authorization_code&code=AUTHORIZATION_CODE&redirect_uri=REDIRECT_URI&client_id=CLIENT_ID&client_secret=CLIENT_SECRET
  2. 授权服务器返回 JWT 格式的访问令牌

    • 授权服务器验证请求,生成 JWT 格式的访问令牌并返回。

    json

    复制

    {
      "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
      "token_type": "Bearer",
      "expires_in": 3600,
      "refresh_token": "def50200ae5d4b6a..."
    }
3.4 访问资源
  1. 客户端使用访问令牌访问资源

    • 客户端在请求资源时,将 JWT 格式的访问令牌放在 Authorization 头中。

    bash

    复制

    GET /resource HTTP/1.1
    Host: api.example.com
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
  2. 资源服务器验证 JWT

    • 资源服务器验证 JWT 的签名和有效期,确保令牌有效。

    • 如果验证通过,返回请求的资源。

3.5 刷新令牌
  1. 客户端请求刷新令牌

    • 当访问令牌过期时,客户端可以使用刷新令牌请求新的访问令牌。

    bash

    复制

    POST /token HTTP/1.1
    Host: auth.example.com
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=refresh_token&refresh_token=REFRESH_TOKEN&client_id=CLIENT_ID&client_secret=CLIENT_SECRET
  2. 授权服务器返回新的访问令牌

    • 授权服务器验证刷新令牌,生成新的 JWT 格式的访问令牌并返回。


4. 总结

  • JWT 是一种令牌格式,用于安全传输信息。

  • OAuth 2.0 是一种授权框架,用于第三方应用访问用户资源。

  • 结合 JWT 和 OAuth 2.0 可以实现安全的身份验证和授权。

  • 完整流程包括用户授权、获取授权码、获取访问令牌、访问资源和刷新令牌。

通过以上流程,可以轻松实现基于 JWT 和 OAuth 2.0 的安全授权系统!


http://www.kler.cn/a/542188.html

相关文章:

  • Cursor 编辑器详细介绍与使用
  • 鸿蒙harmony 手势密码
  • Log4j定制JSON格式日志输出
  • DeepSeek训练成本与技术揭秘
  • Django操作指令大集合说明
  • 音频进阶学习十一——离散傅里叶级数DFS
  • 腾讯云大数据套件TBDS与阿里云大数据能力产品对比
  • 【人工智能】python如何提供API接口供他人调用
  • 初等数论Ⅰ
  • 渗透篇(一)——外网打点之网站篇
  • 【多线程】阻塞队列,线程池,定时器
  • 使用WebMagic爬取51job上的招聘信息
  • unity 安装Entities
  • 《图解设计模式》笔记(七)简单化
  • LeetCode刷题---数组---840
  • 力扣1448. 统计二叉树中好节点的数目
  • 机器学习实战(零基础到精通)
  • deepseek本地部署小白教程
  • JavaEE-前端与后台的搭建
  • 【Mastering Vim 2_01】开篇词:在 AI 时代持续深耕底层技术,做长期主义的坚定捍卫者
  • 4.混合推荐系统
  • 数据结构 单链表的模拟实现
  • CSDN 大模型 笔记
  • 关于浏览器缓存的思考
  • MAAS | DeepSeek本地部署如何开启联网搜索?
  • vue 134~152