登录鉴权
登录鉴权
session-cookie
- 服务端在接收客户端首次访问时在服务端创建sessio,然后保存session(内存或者redis中),然后给这个session生成一个唯一的标识字符串sid,然后在应用头中种下这个唯一表示字符串。
- 对sid签名(加解密。非必须)
- 浏览器接收到请求响应的时候会解析响应头,然后将sid保存在本地cookie中,浏览器在下次http请求的header中会带上该域名的cookie信息。
- 服务器在接收客户端请求时会解析请求头中的sid,根据这个sid去找服务器端保存的该客户端的session,然后判断该请求是否合法。
Token验证
- 客户端使用用户名跟密码请求登录
- 服务端收到请求,去验证用户名与密码
- 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
- 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
- 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
- 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据
总的来说就是客户端在首次登陆以后,服务端再次接收http请求的时候,就只认token了,请求只要每次把token带上就行了,服务器端会拦截所有的请求,然后校验token的合法性,合法就放行,不合法就返回401(鉴权失败)
** session-cookie和Token方式区别
- sessionid只是个唯一标识的字符串,服务端根据这个字符串,查询到在服务器上保持的session,session里面才保存着用户的登录状态。token本身就是一种登录成功凭证,里面保存着用户的登录状态,服务端只用校验此token是否合法。
- session-cookie需要cookie配合,只能用浏览器。token还可以各种客户端
- 时效性:sessionid生成后一直不变,但token是可以动态改变的。
- 可拓展性:token验证本身是比较灵活的,解决方案多,比如JWT.
OAuth(开放授权)
OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容