1、认证 (Authentication) 和授权 (Authorization)的区别是什么?
认证(Authentication):你是谁?
授权 (Authorization):你有什么权限?
稍微正式点(啰嗦点)的说法就是:
- Authentication(认证) 是验证您的身份的凭据(例如用户名/用户ID和密码),通过这个凭据,系统得以知道你就是你,也就是说系统存在你这个用户。所以,Authentication 被称为身 份/用户验证。
- Authorization(授权) 发生在 Authentication(认证) 之后。授权嘛,光看意思大家应该就明白,它主要掌管我们访问系统的权限。比如有些特定资源只能具有特定权限的人才能访问比如 admin,有些对系统资源操作比如删除、添加、更新只能特定人才具有。
这两个一般在我们的系统中被结合在一起使用,目的就是为了保护我们系统的安全性。
2、什么是Cookie ? Cookie的作用是什么?如何在服务端使用 Cookie ?
Cookie 和 Session都是用来跟踪浏览器用户身份的会话方式,但是两者的应用场景不太一样。
Cookie 存放在客户端,一般用来保存用户信息。
应用场景:
- 自动登录:在 Cookie 中保存已经登录过的用户信息,下次访问网站的时候⻚面可以自动帮你登录的一 些基本信息给填了。
- 使用Cookie 保存 session 或者 token ,向后端发送请求的时候带上 Cookie,这样后端就能取 到session或者token了。这样就能记录用户当前的状态了,因为 HTTP 协议是无状态的。
- Cookie 还可以用来记录和分析用户行为。举个简单的例子你在网上购物的时候,因为HTTP协议 是没有状态的,如果服务器想要获取你在某个⻚面的停留状态或者看了哪些商品,一种常用的实 现方式就是将这些信息存放在Cookie。
3、Cookie 和 Session 有什么区别?如何使用Session进行身份验证?
Session 的主要作用就是通过服务端记录用户的状态。
典型的场景是购物⻋,当你要添加商品到购物 ⻋的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是无状态的。服务端给特定的用户创建特定 的 Session 之后就可以标识这个用户并且跟踪这个用户了。
Cookie 数据保存在客户端(浏览器端),Session 数据保存在服务器端。相对来说 Session 安全性更 高。如果使用 Cookie 的一些敏感信息不要写入 Cookie 中,最好能将 Cookie 信息加密然后使用到的 时候再去服务器端解密。
那么,如何使用Session进行身份验证?
很多时候我们都是通过 SessionID 来实现特定的用户,SessionID 一般会选择存放在 Redis 中。举个 例子:用户成功登陆系统,然后返回给客户端具有 SessionID 的 Cookie,当用户向后端发起请求的时 候会把 SessionID 带上,这样后端就知道你的身份状态了。关于这种认证方式更详细的过程如下:
- 用户向服务器发送用户名和密码用于登陆系统。
- 服务器验证通过后,服务器为用户创建一个 Session,并将 Session信息存储 起来。
- 服务器向用户返回一个 SessionID,写入用户的 Cookie。
- 当用户保持登录状态时,Cookie 将与每个后续请求一起被发送出去。
- 服务器可以将存储在 Cookie 上的 Session ID 与存储在内存中或者数据库中的 Session 信息进行比对,以验证用户的身份,返回给用户客户端响应信息的时候会附带用户当前的状态。