关于OAuth

发布时间 2023-08-30 18:10:54作者: _Origin


什么是OAuth2.0协议?

  OAuth 2.0(Open Authorization 2.0)是一种用于授权的开放标准协议。它提供了一种安全且标准化的方式,允许应用程序获取对用户数据的有限访问权限,而无需获取用户的凭据。OAuth 2.0广泛用于应用程序、服务和资源之间的授权和身份验证交互。

OAuth 2.0协议的主要目标是允许用户授权第三方应用程序访问他们存储在另一个服务提供商上的资源,而无需将自己的凭证(如用户名和密码)直接提供给第三方应用程序。这种授权机制对于保护用户隐私和安全至关重要。

OAuth 2.0协议中涉及的主要角色和概念包括:

  1. 资源所有者(Resource Owner): 资源所有者是指用户,拥有需要被保护的资源,例如用户的个人数据或照片。

  2. 客户端(Client): 客户端是请求访问资源的应用程序。它可能是一个网站、移动应用或其他形式的应用。

  3. 授权服务器(Authorization Server): 授权服务器负责验证用户身份并颁发访问令牌。它管理着用户的授权信息和权限。

  4. 资源服务器(Resource Server): 资源服务器存储和管理受保护的资源,只有在获得有效访问令牌的情况下才会向客户端提供资源。

  5. 访问令牌(Access Token): 访问令牌是代表用户授权的凭证,用于访问资源服务器。它具有一定的有效期,不包含用户的敏感信息。

  6. 授权码(Authorization Code): 用于交换访问令牌的临时凭证,客户端通过授权服务器获得授权码。

OAuth 2.0协议主要定义了不同的授权模式,用于实现不同场景下的授权流程。常见的授权模式包括:

  • 授权码模式(Authorization Code Grant)
  • 隐式授权模式(Implicit Grant)
  • 密码模式(Resource Owner Password Credentials Grant)
  • 客户端模式(Client Credentials Grant)

 三方不互信模式(互联网)

 

 

 客户端模式(适合系统内部)

 

什么是jwt令牌?

  JSON Web Token是一种用于在不同实体之间安全传输信息的开放标准(RFC 7519)。它是一种轻量级的、自包含的令牌格式,用于在不同系统之间传递被认证和授权的信息。JWT通常被用作身份验证和授权的令牌,用于在客户端和服务器之间传递信息。

JWT 令牌由三部分组成,通过点号(.)分隔:

  1. Header(头部): 头部通常包含两部分信息:令牌的类型(JWT)和所使用的签名算法(例如,HMAC SHA256 或 RSA)。头部是一个 JSON 对象,例如:{"alg": "HS256", "typ": "JWT"}

  2. Payload(负载): 负载包含要传递的数据,也是一个 JSON 对象。负载中可以包含一些标准的声明(例如,颁发者、过期时间、主题等),也可以包含自定义的声明。负载中的信息是可以被解析和读取的,但是不是加密的。例如:{"sub": "user123", "exp": 1551234567}

  3. Signature(签名): 签名是通过使用指定的算法对头部、负载以及一个密钥进行签名生成的。签名可以保证令牌在传输过程中没有被篡改。

JWT 的工作流程通常如下:

  1. 用户通过身份验证登录,并且服务器为用户生成一个 JWT 令牌。
  2. 服务器将 JWT 令牌发送给客户端。
  3. 客户端在后续请求中将 JWT 令牌附加在请求头部(通常是 Authorization 头)中发送给服务器。
  4. 服务器使用密钥验证令牌的签名,并解析负载以获取信息。如果令牌是有效的,服务器可以根据负载中的信息判断用户的身份和权限。

JWT 的优点包括:

  • 自包含:令牌中包含所有必要的信息,不需要频繁查询数据库或其他存储。
  • 可扩展性:可以在负载中添加自定义声明,适应不同应用需求。
  • 跨平台:由于是基于 JSON 格式,因此在不同编程语言和平台之间易于解析和生成。
  • 分布式身份验证:适用于微服务架构和跨域应用场景。

然而,需要注意的是,JWT 令牌是基于对称或非对称加密的,因此在使用时需要注意安全性,确保私钥和公钥的安全存储,以及令牌的过期时间设置等。