cookie、session、jwt、Oauth2.0、sso 分别有什么用
cookie、session、jwt都是 web 应用中的认证方式,最早只有 cookie,后面觉得所有数据存储在客户端不安全,就出现了 cookie-session,再后面有了 jwt。
cookie工作原理
cookie 数据存储在用户的本地。服务器完全根据 cookie 确定访问者是谁。
黑客可以获取 cookie 中的信息,例如用户名账号密码等信息。
session 工作原理
session需要和 cookie 进行配合。区别是cookie 需要在客户端存储所有详细信息。而 session 的认证方法,大多数敏感信息存储在服务端,只在客户端存储一个 sessionid 来代表用户的身份。这样子用户的敏感信息相对就得到了保护。
jwt-json web token
更像是一种完整性认证的方式。显示传递用户名,加密方式和秘文。这个密文只有服务端能解开。并且能够根据解开的结果判断是否被篡改。
后续服务端会将这段 jwt 发送给认证成功的用户,用户使用这一段 jwt 来代表用户自己的身份。
Oauth2.0
OAuth 2.0 是一种常用于授权的协议,它允许第三方应用程序在不暴露用户凭证的情况下,访问用户存储在资源服务器上的数据。它通常用于社交登录和授权场景,比如允许一个应用访问用户的Google或Facebook信息。OAuth 2.0 的认证过程涉及多个步骤和角色,下面是其基本流程:
角色:
- 资源拥有者(Resource Owner):即用户,拥有受保护的资源。
- 客户端(Client):需要访问资源的第三方应用程序。
- 授权服务器(Authorization Server):负责验证用户身份并发放访问令牌(Access Token)。
- 资源服务器(Resource Server):存储受保护的资源,并依赖访问令牌来授予访问权限。
OAuth 2.0 认证过程:
- 用户授权请求:
- 客户端向授权服务器发送请求,要求代表用户访问其资源。此时,用户会看到授权请求,通常是在登录页面或授权页面上显示一个提示,要求用户确认是否同意授予该客户端访问权限。
- 用户同意授权:
- 资源拥有者(用户)查看客户端请求的权限范围,并选择是否同意。若用户同意,授权服务器生成一个授权码(Authorization Code),并将该授权码返回给客户端。
- 客户端请求访问令牌:
- 客户端收到授权码后,通过后端服务器向授权服务器发送一个请求,使用该授权码来交换一个访问令牌(Access Token)。在这个步骤中,客户端还会验证自己的身份(通过客户端ID和客户端密钥)。
- 授权服务器返回访问令牌:
- 授权服务器验证授权码和客户端身份后,返回访问令牌(有时还包括刷新令牌),该令牌允许客户端在一段时间内访问用户的资源。
- 客户端使用访问令牌访问资源:
- 客户端使用获得的访问令牌,向资源服务器发起请求,访问用户的受保护资源。资源服务器会检查该访问令牌的有效性,如果验证通过,则允许访问资源。
- 刷新访问令牌(可选):
- 访问令牌通常有有效期,当令牌过期时,客户端可以使用刷新令牌(如果有)向授权服务器请求新的访问令牌,而无需再次请求用户授权。
SSO
所有受保护的应用都依赖于同一个SSO认证服务器来进行身份认证。只要用户在SSO认证服务器登录,认证服务器会生成一个通用的认证信息(如令牌或SAML断言),任何依赖SSO认证服务器的应用都可以基于这个令牌或断言确认用户的身份。