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

发布于:2025-02-12 ⋅ 阅读:(139) ⋅ 点赞:(0)

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


1. JWT 和 OAuth 2.0 的区别

特性 JWT OAuth 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 的安全授权系统!


网站公告

今日签到

点亮在社区的每一天
去签到