好久不见了,因为工作原因,写了一些东西也没发出来,感觉写的不好,放笔记里面感觉要被封存了。哈哈哈,
目前常见的几种鉴权方式:
- HTTP Basic Authentication
- session-cookie
- Token 验证
- OAuth(开放授权)
Basic认证
Basic认证是HTTP中最为简单的认证方式,因为简单,所以不是很安全。
当一个客户端向一个需要认证的HTTP服务器进行数据请求时,如果之前没有认证过,HTTP服务器会返回401状态码,要求客户端输入用户名和密码,用户输入用户名和密码后,用户名和密码会经过BASE64加密附加到请求信息中再次请求HTTP服务器,HTTP服务器会根据请求头携带的认证信息,决定是否认证成功及做出相应的响应。
当我们访问一个需要认证的请求
如:访问一个需要登陆的svn地址 https://121.42.199.80/svn/wisetraining/trunk/code/
访问这个地址后,会出现登陆弹出框,当我们不做登陆,那么会返回401状态码
Status Code: 401 Unauthorized
WWW-Authenticate: Basic realm="VisualSVN Server"
当我们输入用户名和密码后,将用户名和密码以BASE64加密方式加密,并将密文放入前一条请求信息中,则客户端发送的第一条请求信息则变成如下内容:
// Request Headers 里面多出来这一条信息
Authorization: Basic eXVlZmFuZzoxMjM0NTY=
eXVlZmFuZzoxMjM0NTY= 是根据用户输入的用户名和密码进行BASE64进行加密生成的。
服务器收到上述请求信息后,将Authorization字段后的用户信息取出、解密,将解密后的用户名及密码与用户数据库进行比较验证,如用户名及密码正确,服务器则根据请求,将所请求资源发送给客户端
session-cookie
这种方式在老的系统较为常见,只适用于web系统,以前用java servlet写服务端时候,都会自动维护session,会在cookie写一个JSESSIONID的值,
第二种这个方式是利用服务器端的session(会话)和浏览器端的cookie来实现前后端的认证,即session和cookie配合使用,由于http请求时是无状态的,服务器正常情况下是不知道当前请求之前有没有来过,这个时候我们如果要记录状态,就需要在服务器端创建一个绘画,将同一个客户端的请求都维护在各自的会话中,每当请求到达服务器端的时候,先检查改客户端有没有在服务端创建session,如果有则已经认证成功了,否则就认证失败。
session-cookie步骤如下:

Token
Token步骤
- 客户端使用用户名和密码请求登陆
- 服务端收到请求,去验证用户名和密码
- 验证成功后,服务端会签发一个Token,再把这个Token发送给客户端
- 客户端每次服务器请求资源的时候需要带着服务器签发的Token
- 服务器收到请求后,然后去验证客户端请求里面带的Token,如果验证成功,就向客户端返回请求数据。
Token验证的特点
- 无状态,可扩展
- 支持多设备
- 跨程序调用
- 安全
Token验证和session-cookie验证的区别:
token和session其实都是为了身份验证,session一般翻译为会话,而token更多的时候是翻译为令牌
根据上面的Token验证步骤会发现,Token验证和session-cookie验证好想差不多啊,seesion-cookie是通过seesionid来作为浏览器和服务端的链接桥梁,而token验证方式貌似是token来起到seesionid的角色。 其实他们差距很大
- session-cookie是需要客户端的cookie来存储,但是Token可以存储再cookie,storage,或者内存中。
- Token是一种服务器无状态的认证方式,服务端不存放token数据,生成后发送给客户端。
OAuth(开放授权)
OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容,为了保护用户数据的安全和隐私,第三方网站访问用户数据前都需要显式的向用户征求授权。我们常见的提供OAuth认证服务的厂商有支付宝,QQ,微信。
有什么不对的地方大家请大家多多指教,相互学习哈