全栈开发知识点|那些authentication之类的名词

发布时间 2023-06-19 19:21:33作者: 跪求个offer

原文来自于:https://www.51cto.com/article/675946.html

此处进行进一步的记录


  • 身份验证(Authentication):验证当前用户的身份,证明“你是你自己”
      1.  用户名密码登录
      2.  邮箱发送登录链接
      3.  手机号接收验证码
      4.  只要你能收到邮箱/验证码,就默认你是账号的主人
  • 授权 Authorization: 某个用户授予其他应用访问该用户某些资源的权限

  • 凭证 Credentials:标记访问者的身份。


     

  • Cookie:

    • HTTP 是无状态的协议:服务端不会保存任何会话信; 每个请求都是完全独立的, 所以服务端无法确认当前访问者的身份信息,所以无法确认发送请求和接受请求的是不是一个人。
    • 为了解决上面的问题,所以必须去记录和维护一个状态,这里使用cookie或者session
    • cookie 存储在客户端:cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上
    • cookie 是不可跨域的:每个 cookie 都会绑定单一的域名,无法在别的域名下获取使用,一级域名和二级域名之间是允许共享使用的(靠的是 domain)
  • Session:另外一种记录服务器和客户端会话状态的机制,通常基于cookie实现

    • session 认证流程:

      1.  用户第一次请求服务器的时候,服务器根据用户提交的相关信息,创建对应的 Session
      2.  请求返回时将此 Session 的唯一标识信息 SessionID 返回给浏览器
      3.  浏览器接收到服务器返回的 SessionID 信息后,会将此信息存入到 Cookie 中,同时 Cookie 记录此 SessionID 属于哪个域名
      4.  当用户第二次访问服务器的时候,请求会自动判断此域名下是否存在 Cookie 信息,如果存在自动将 Cookie 信息也发送给服务端服务端会从 Cookie 中获取 SessionID,再根据 SessionID 查找对应的 Session 信息,如果没有找到说明用户没有登录或者登录失效,如果找到 Session 证明用户已经登录可执行后面操作。
  • Cookie 和 Session 的区别

    • 安全性:Session 比 Cookie 安全,Session 是存储在服务器端的,Cookie 是存储在客户端的。
    • 存取值的类型不同:Cookie 只支持存字符串数据,想要设置其他类型的数据,需要将其转换成字符串,Session 可以存任意数据类型。
    • 有效期不同:Cookie 可设置为长时间保持,比如我们经常使用的默认登录功能,Session 一般失效时间较短,客户端关闭(默认情况下)或者 Session 超时都会失效。
    • 存储大小不同:单个 Cookie 保存的数据不能超过 4K,Session 可存储数据远高于 Cookie,但是当访问量过多,会占用过多的服务器资源。

 

  • 令牌 Token:访问资源接口(API)时所需要的资源凭证,简单 token 的组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token 的前几位以哈希算法压缩成的一定长度的十六进制字符串)

    • Acesss Token的特点是 * 服务端无状态化、可扩展性好 * 支持移动端设备 * 安全 * 支持跨程序调用
      1.  客户端使用用户名跟密码请求登录
      2.  服务端收到请求,去验证用户名与密码
      3.  验证成功后,服务端会签发一个 token 并把这个 token 发送给客户端
      4.  客户端收到 token 以后,会把它存储起来,比如放在 cookie 里或者 localStorage 里
      5.  客户端每次向服务端请求资源的时候需要带着服务端签发的 token
      6.  服务端收到请求,然后去验证客户端请求里面带着的 token ,如果验证成功,就向客户端返回请求的数据
  • Token 和 Session 的区别

    Session 是一种记录服务器和客户端会话状态的机制,使服务端有状态化,可以记录会话信息。而 Token 是令牌,访问资源接口(API)时所需要的资源凭证。Token 使服务端无状态化,不会存储会话信息。所以简单来说:如果你的用户数据可能需要和第三方共享,或者允许第三方调用 API 接口,用 Token 。如果永远只是自己的网站,自己的 App,用什么就无所谓了。

  • JWT(JSON Web Token)目前最流行的跨域认证解决方案

    • JWT 是为了在网络应用环境间传递声明而执行的一种基于 JSON 的开放标准。JWT 的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源
    • WT 认证流程:

      1.  用户输入用户名/密码登录,服务端认证成功后,会返回给客户端一个 JWT
      2.  客户端将 token 保存到本地(通常使用 localstorage,也可以使用 cookie)
      3.  当用户希望访问一个受保护的路由或者资源的时候,需要请求头的 Authorization 字段中使用Bearer 模式添加 JWT