认证、授权、凭证
认证:验证“你是谁”。
授权:决定“你能做什么”。
凭证:用于证明身份的证据或数据。
认证
认证是验证用户身份的过程,即确认用户是否是他声称的那个人。常见的认证方法包括:
- 用户名和密码:最常见的认证方式,用户通过输入注册时设置的用户名和密码来证明身份。
- 双因素认证(2FA):在用户名和密码的基础上,还要求输入第二种验证方式,如手机短信验证码或硬件令牌。
- 生物识别:如指纹识别、面部识别、虹膜识别等。
- OAuth、OpenID等第三方认证:用户通过第三方平台(如Google、Facebook)登录。
授权
授权是指在用户通过认证后,系统决定其是否有权限访问特定资源或执行某些操作的过程。换句话说,授权决定了用户“能做什么”。授权通常在认证之后进行,确保只有经过验证的用户才能被赋予相应权限。
例如,在一个系统中,管理员用户可能有权查看、编辑和删除所有数据,而普通用户可能只被授权查看和编辑自己的数据。
凭证
凭证是用户用来证明自己身份的证据或数据。在认证过程中,凭证通常包括用户名和密码组合、令牌(token)、API密钥、证书等。凭证的安全管理非常重要,因为一旦凭证泄露,攻击者就可能冒充合法用户进行未经授权的操作。
- 会话凭证:例如,在Web应用中,用户登录后生成的会话ID。
- OAuth令牌:例如,在OAuth协议中使用的访问令牌,用于授权和访问受保护的资源。
鉴权方式
Basic认证
介绍:
- Basic认证是HTTP协议的一部分,使用Base64编码将用户名和密码组合传递给服务器。客户端通过在每次请求中添加
Authorization
头来传递这些凭据。
优点:
- 简单易用,浏览器和许多HTTP客户端原生支持。
缺点:
- 安全性较低,除非在HTTPS下使用,否则容易被中间人攻击窃取凭据。
Cookie
介绍:
- Cookie 是由服务器生成并发送到客户端的小型数据文件,客户端在随后的请求中自动发送这些文件。它们用于存储用户会话状态、身份标识或其他数据。
优点:
- 持久性强,可以跨会话保存数据。可以设置过期时间、作用域等。
缺点:
- 容易被劫持(如跨站脚本攻击XSS)
- 不支持跨域
- 存储的数据量有限,一般不超过4KB
- 安全性依赖于HTTPS和HttpOnly标志
Session
介绍:
- Session 是服务器端存储的用户会话信息。是基于Cookie的实现的,Session保存在服务端,Session ID保存在客户端的Cookie中,服务器端通过该ID来查找和识别用户会话数据。
优点:
- 安全性高,敏感数据存储在服务器端。
缺点:
- 需要管理服务器端的会话状态,消耗服务器资源。对于分布式应用,需要处理Session共享问题。
Token
介绍:
- Token认证通过生成一个Token(如JWT),客户端在每次请求时携带该Token。服务器根据Token的内容和签名来验证用户身份,无需在服务器端存储会话数据。
优点:
- 无状态认证,适合分布式系统和微服务架构
- Token可以携带更多的用户信息
- 支持跨域访问
- 更适用于移动应用
- 不存在CSRF漏洞
缺点:
- 一般存放于 localStorage 中,存在XSS漏洞时很容易被盗取
- Token一旦泄露,可能会导致安全问题。需要管理Token的生命周期(如过期时间、刷新等)
SSO(单点登录)
介绍:
- 单点登录允许用户在一个系统中登录后,自动获得访问其他相关系统的权限。常通过OAuth、SAML等协议实现。
优点:
- 提高用户体验,减少多次登录的繁琐。
- 提高安全性,便于管理
缺点:
- 实施复杂,涉及多个系统之间的信任关系。如果中央认证系统被攻破,所有相关系统都会受影响。
OAuth
介绍:
- OAuth(Open Authorization、开放授权协议) 是一种授权框架,允许用户授权第三方应用访问他们的资源,而不暴露其密码等核心信息。OAuth 2.0是当前广泛使用的版本,通常用于社交登录等场景。
- 例如,在第三方网站上使用微信或者QQ作为账号进行登录,就是使用的oauth协议,只返回给第三方诸如用户名、头像等信息,而不会返回给第三方密码等核心数据。
优点:
- 安全性强,用户可以授权特定权限,保护敏感数据。
缺点:
- 比较复杂,涉及多个步骤和角色(如资源所有者、客户端、认证服务器、资源服务器)。