认证授权AUTH
1. Cookie、Session 机制
Cookie 存放在客户端,一般用来保存用户信息。HTTP 协议是无状态的。
Session 的主要作用就是通过服务端记录用户的状态。依赖Session的关键业务一定要确保客户端开启了Cookie。
Session认证流程:
用户向服务器发送用户名和密码用于登陆系统。
服务器验证通过后,服务器为用户创建一个 Session,并将 Session信息存储 起来。
服务器向用户返回一个 SessionID,写入用户的 Cookie。
当用户保持登录状态时,Cookie 将与每个后续请求一起被发送出去。
服务器可以将存储在 Cookie 上的 Session ID 与存储在内存中或者数据库中的 Session 信息进行比较,以验证用户的身份,返回给用户客户端响应信息的时候会附带用户当前的状态。
如果客户端禁用了Cookie,那么Seesion就无法正常工作。只能显示的将sessionId 请求url后面。
2、JWT Token机制
JWT (JSON Web Token) 通过 token 方式实现会话,服务器端不需要保存Session数据。由 3 部分构成:
Header :描述 JWT 的元数据。定义了生成签名的算法以及 Token 的类型。
Payload(负载):用来存放实际需要传递的数据
Signature(签名):服务器通过Payload、Header和一个密钥(secret)使用 Header 里面指定的签名算法(默认是 HMAC SHA256)生成。
在基于 Token 进行身份验证的的应用程序中,服务器通过Payload、Header和一个密钥(secret)创建令牌(Token)并将 Token 发送给客户端,客户端将 Token 保存在 Cookie 或者 localStorage 里面,以后客户端发出的所有请求都会携带这个令牌。你可以把它放在 Cookie 里面自动发送,但是这样不能跨域,所以更好的做法是放在 HTTP Header 的 Authorization字段中: Authorization: Bearer Token。
3、OAuth 2 机制
OAuth 2.0实际上就是一种授权机制,它的最终目的是为第三方应用颁发一个有时效性的令牌 token,使得第三方应用能够通过该令牌获取相关的资源。
OAuth 2.0 比较常用的场景就是第三方登录,当你的网站接入了第三方登录的时候一般就是使用的 OAuth 2.0 协议。
另外,现在OAuth 2.0也常见于支付场景(微信支付、支付宝支付)和开发平台(微信开放平台、阿里开放平台等等)。
OAuth 2.0 规定了四种获得令牌的流程:
1.授权码(authorization code)方式,指的是第三方应用先申请一个授权码,然后再用该码获取令牌。
2.隐藏式:允许直接向前端颁发令牌。这种方式没有授权码这个中间步骤,所以称为(授权码)"隐藏式"(implicit)。
3.密码式:高度信任某个应用,使用用户名和密码,申请令牌,
4.凭证式:适用于没有前端的命令行应用,即在命令行下请求令牌
4、SSO 单点登录机制
同域名下:
按照上图,用户登录后Authtoken保存在Cookie中。 domian= test. com 浏览器会将domain设置成 .test.com, 这样访问所有*.test.com的web站点,都会将Authtoken携带到服务器端。 然后通过SSO服务,完成对用户状态的校验/用户登录信息的获取
- 登录信息获取/登录状态校验
跨域名登录、登出:
5、网站攻击
CSRF(Cross Site Request Forgery)跨站请求伪造
XSS (Cross Site Scripting) 跨站脚本攻击