鉴权:指用户是否有访问系统的权利。
传统鉴权:通过密码来验证,他对用户时,为用户分配一个密码,或者用户自己申请,每个获得密码的用户,都已经被授权。
缺点:只要获取到用户密码,就会拥有权限身份。只能通过管理员修改用户密码,在这之前,还需要人工校验用户的合法身份。
主流鉴权:通过认证授权来验证数字签名是否正确,授权发生在鉴权之后。
二、鉴权类型
- HTTP Basic Authentication(HTTP基本认证)
- HTTP自带的权限控制和认证机制
- 访问者需要输入密码才能访问页面,否则返回401错误;
- 通过认证的方式
GET:URL上带入用户名和密码
POST:在Header中添加Authorization,值为Base64加密后的串
- 一种不安全的认证机制
- session + cookie验证
- Token验证
- OAuth(开放授权)
三、Cookie
- 客户端发送请求至服务器
- 服务器返回给客户端一个cookie
- 客户端保存该cookie,再次发请求至服务器,携带该cookie
- 服务器检查客户端传来的cookie是否与当初发送给客户端的一致
- 一致,则返回响应体;不一致,则返回失败
四、Session
- 客户端发起请求至服务器,服务器生成一个Session 和Session ID
- 服务器将响应内容和该sessionID(即Cookie)发送至客户端
- 客户端再次发起请求,携带该sessionID(即Cookie)与请求内容一并发送至服务器
- 服务器提取客户端发送的sessionID(即Cookie),与保存的Session ID对比
五、Token
- 服务器生成的一串字符串,是用户身份的验证方式
- 由uid、time、sign组成
- uid:用户唯一的身份标识
- time:当前时间的时间戳
- sign:签名,由token前几位 + 复杂算法的十六进制字符串组成
- 验证原理
- 客户端登录(用户名+密码)
- 服务器验证用户名和密码,成功后,签发一个Token,并回传给客户端
- 客户端收到Token后,进行存储,放在cookie、header或者Local Storage里
- 客户端每次发送请求,都携带该Token
- 服务器验证Token,通过,则返回响应内容;不通过,返回失败信息
六、OAuth(Open Authorization)
- 是一种开放授权协议,允许第三方应用程序使用资源所有者的凭据获得对资源的访问权限
- 四个角色
- 资源拥有者
- 资源服务器
- 客户端
- 授权服务器
- 四种授权模式
- 授权码模式:功能最完整、流程最严密
- 简化模式
- 密码模式
- 客户端模式
- 原理
- 客户端(Client)向资源所有者(Resource Owner)请求授权
- 客户端收到用户授权(资源所有者授权的凭证(Authorization))
- 客户端通过与授权服务器(Authorization Server)进行身份验证,并提供授权凭证来获取访问令牌(Access Token)
- 授权服务器对客户端进行身份验证并验证授权许可,有效,则发送访问令牌(Access Token)
- 客户端通过资源服务器访问受保护的资源,并通过访问令牌进行身份验证
- 资源服务器验证访问令牌,有效,则为请求提供服务
七、登录方式
- 多点登录
- 不同网站都有每个网站自己的用户和密码(不同数据库,不同登录模块),各站点的登录状态相互不认可,各站点需要手工逐一登录
- 流程
认证、授权
- 单点登录(Single Sign On)SSO
- 各站点共用一台认证服务器。用户登录任何一个站点,其他站点可免登录,且各站点可通过登录站点的登录状态进行直接交互。
- 简单来说,用户一次登录,即可访问所有相关联的系统,但仅限于登录访问,不负责授权。