OAuth 2.0是一个关于授权的开放网络标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方应用或分享他们数据的所有内容。其最终目的是颁发一个有时效性的令牌(access_token),第三方应用根据这个access_token就可以去获取用户的相关资源,如用户显示名称、email这些信息。
简单来说,OAuth2.0就是用来授权第三方应用,让第三方应用可以获取用户数据
1.资源所有者(Resource Owner):即代表用户本身,授权客户端访问本身资源信息的用户
2.资源服务器(Resource Server):提供用户资源的服务器
3.授权服务器(Authorization Server) :用来验证用户提供的信息是否正确,在成功验证用户身份,并获得授权后,给客户端派发访问资源令牌
4.客户端(Client) :代表意图访问受限资源的第三方应用
Oauth2授权模式分为授权码模式、简化模式、密码模式和客户端模式四种
1、授权码模式(Authorization Code):这是标准的OAuth 2.0授权流程,适用于安全的端到端通信场景。客户端首先引导用户到授权服务器进行授权,授权后授权服务器将授权码发送给客户端,客户端再拿着这个授权码向授权服务器申请令牌,申请成功之后,客户端再通过令牌去访问资源服务器。
2、简化模式(Implicit):在简化模式下,令牌直接在授权页面中返回,不再需要授权码。客户端发送授权请求,用户授权后,资源服务器将重定向回调URL,并将令牌作为参数传递给它。客户端将令牌发送给授权服务器(Authorization Server),请求获取AccessToken。客户端收到Access Token后,就可以使用它来访问受保护的资源。
3、密码模式(Resource Owner Password):在这种模式下,客户端直接向授权服务器提供用户的用户名和密码,授权服务器根据这些信息为客户端发放令牌。
4、客户端模式(Client Credentials):在这种模式下,客户端向授权服务器提供自己的用户名(通常是客户端的客户端ID,不需要用户授权,适合后台服务间的认证和访问)和密码,授权服务器根据这些信息为客户端发放令牌。
JWT是JSON Web Token的缩写,它是一种开放标准(RFC 7519)定义的方式,用于在网络之间安全地传输信息。这些信息可以用于认证、授权、信息交换等。
一个 JWT 实际上就是一个字符串,也是一种创建token的方式
JWT主要由三部分组成:头部(Header)、负载(Payload)和签名(Signature)。
头部包含两部分:令牌类型(token type)和算法(Algorithm),这部分使用Base64编码。
负载是实际传输的数据,可以包含用户ID、角色、exp(过期时间)等,这部分也使用Base64编码。
签名是对头部和负载的签名,以防止令牌被篡改。签名使用头部中指定的算法和秘钥生成。
想了解更多信息可以去官网学习
JWT官网:https://jwt.io/