前端常用登录方式

发布时间 2023-12-20 15:28:15作者: guozhenshu

前端常见登录方式

总结下前端几种常见的登录方式:

  • Session
  • Token
  • Oauth 第三方登录
  • SSO 单点登录
  • 多因素认证

1、 基于会话(Session)的认证

特点:服务端存储 SessionId

1.1 实现流程

  1. 用户提交登录表单,包含用户名和密码。
  2. 服务器验证凭证,如果凭证正确,则创建一个新的会话,并生成一个唯一的会话 SessionId。
  3. 服务器将 SessionId 作为HTTP响应的一部分(通常是设置在Cookie中)返回给浏览器。
  4. 浏览器将 SessionId 保存在Cookie中,后续的请求会自动带上这个Cookie。
  5. 服务器通过Cookie中的 SessionId 识别用户身份,处理请求。

1.2 优缺点

优点:

  • 相对简单易懂,易于实现。
  • 服务器控制会话,可以主动管理用户的登录状态,如主动让用户登出。

缺点:

  • 随着用户量的增加,服务器需要维护更多的会话状态,可能对服务器资源和性能造成压力。
  • 如果服务器端是一个集群,为了同步登录态,需要将 SessionId 同步到每一台机器上,增加了服务器端维护成本
  • 需要使用安全措施防范会话劫持和固定会话攻击

1.3 应用场景

适用于单一服务器、用户量不大的小型网站或内部系统

2、基于Token的认证(如JWT)

特点:浏览器存储 token

2.1 实现流程

  1. 用户提交登录表单,包含用户名和密码。
  2. 服务器验证用户凭证,如果凭证正确,生成包含用户信息的Token(如使用JWT格式)。
  3. 服务器将Token返回给前端。
  4. 前端存储Token(通常在LocalStorage、SessionStorage或内存中)。
  5. 后续请求携带Token(通常在HTTP请求头的Authorization字段)。
  6. 服务器校验Token,如果有效,处理请求并返回资源。

2.2 优缺点

优点:

  • 服务端不需要维护用户状态,所以不会对服务器造成压力
  • 无状态,适合分布式系统,方便横向扩展
  • Token能够包含过期时间和权限信息,更加灵活

缺点:

  • Token如果被盗用,则攻击者可以得到和用户相同的权限。
  • Token一旦签发,在有效期内一般无法在服务端使其失效

2.3 应用场景

  • 服务需扩展到多个服务器,或后端服务为微服务架构。
  • 适合需要单页面应用(SPA)的认证和前后端分离的项目

3、OAuth/OpenID

3.1 实现流程

  1. 用户选择使用第三方账户登录(如Google、Facebook)。
  2. 应用重定向到第三方服务提供商的认证页面。
  3. 用户在第三方服务提供商处完成认证。
  4. 第三方服务提供商重定向回应用,并带上一个授权码。
  5. 应用使用授权码与第三方服务接口交换得到访问令牌(Access Token)。
  6. 后续请求携带访问令牌访问第三方服务的受保护资源。

3.2 优缺点

优点:

  • 用户无需注册和记忆新的账号密码,可以使用第三方账号登录。
  • 应用无需管理用户密码,提升安全性。
  • 标准化流程和广泛的支持度,各大平台都支持OAuth。

缺点:

  • 对于开发者来说,实施起来相对复杂。
  • 依赖第三方服务的可用性和安全性。
  • 用户信息是由第三方服务管理,可能会受限于第三方服务提供的信息。

3.3 应用场景

  • 需要整合多个服务认证的门户网站或应用,让用户拥有一站式登录体验。

4、单点登录(Single Sign-On, SSO)

特点:用户在SSO系统登录一次后,可以访问所有集成了SSO的应用,无需重复登录

4.1 实现流程

  1. 用户首次尝试访问应用时被重定向到SSO服务器进行认证。
  2. 用户提供凭证并登录到SSO服务器。
  3. SSO服务器返回一个认证令牌(如SSO票据)给应用。
  4. 应用使用该票据向SSO服务器确认用户身份。
  5. 确认成功后,用户可在不同的应用间自由切换而无需重新认证。

4.2 优缺点

优点:

  • 用户在一个系统登录后,可以无缝访问其他所有系统,提升用户体验。
  • 统一认证,减少用户管理成本。
  • 一处退出,所有关联服务同步登出,增加安全性。

缺点:

  • 实现复杂,需要较高的技术实力。
  • 单点故障风险,认证中心出问题可能导致所有系统无法使用。

4.3 应用场景

  • 企业内部多个应用间实现用户信息共享和快速切换。

5、多因素认证(Multi-Factor Authentication, MFA)

5.1 实现流程:

  1. 用户首先使用用户名和密码进行登录。
  2. 登录成功后,系统要求用户提供第二个认证因素,如短信验证码、应用生成的一次性密码、指纹等。
  3. 用户输入第二认证因素后,系统确认无误,并完成登录。

5.2 优缺点

优点:

  • 安全性高,即使主密码被窃取,也难以登录系统。
  • 安全的同时也为用户账户多了一层保护。
    缺点:
  • 增加了登录流程的复杂性,可能影响用户体验

5.3 应用场景

对安全性要求很高的系统,如银行、金融、企业管理系统。