单点登录2,jwt与aAuth2.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 用户授权
-
用户访问客户端应用:
-
用户访问客户端应用,客户端应用需要访问用户的资源。
-
-
重定向到授权服务器:
-
客户端应用将用户重定向到授权服务器的授权端点,附带以下参数:
-
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.2 获取授权码
-
授权服务器重定向回客户端:
-
授权服务器将用户重定向回客户端应用,附带授权码
code
和state
参数。
复制
https://client.example.com/callback?code=AUTHORIZATION_CODE&state=STATE
-
-
客户端验证
state
:-
客户端验证
state
参数,防止 CSRF 攻击。
-
3.3 获取访问令牌
-
客户端请求访问令牌:
-
客户端向授权服务器的令牌端点发送请求,附带以下参数:
-
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
-
-
授权服务器返回 JWT 格式的访问令牌:
-
授权服务器验证请求,生成 JWT 格式的访问令牌并返回。
json
复制
{ "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "token_type": "Bearer", "expires_in": 3600, "refresh_token": "def50200ae5d4b6a..." }
-
3.4 访问资源
-
客户端使用访问令牌访问资源:
-
客户端在请求资源时,将 JWT 格式的访问令牌放在
Authorization
头中。
bash
复制
GET /resource HTTP/1.1 Host: api.example.com Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
-
-
资源服务器验证 JWT:
-
资源服务器验证 JWT 的签名和有效期,确保令牌有效。
-
如果验证通过,返回请求的资源。
-
3.5 刷新令牌
-
客户端请求刷新令牌:
-
当访问令牌过期时,客户端可以使用刷新令牌请求新的访问令牌。
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
-
-
授权服务器返回新的访问令牌:
-
授权服务器验证刷新令牌,生成新的 JWT 格式的访问令牌并返回。
-
4. 总结
-
JWT 是一种令牌格式,用于安全传输信息。
-
OAuth 2.0 是一种授权框架,用于第三方应用访问用户资源。
-
结合 JWT 和 OAuth 2.0 可以实现安全的身份验证和授权。
-
完整流程包括用户授权、获取授权码、获取访问令牌、访问资源和刷新令牌。
通过以上流程,可以轻松实现基于 JWT 和 OAuth 2.0 的安全授权系统!