java web平台开发授权认证

Session认证

  1. 用户在登录域输入用户名和密码,点击登录。
  2. 请求发送后,后端服务器根据接受到的数据进行数据库查询以验证用户的合法性。如果请求有效,使用在数据库得到的信息创建一个session,然后在响应头信息中添加这个session信息,目的是将session信息存储在前端浏览器中。
  3. 请求应用中受限制的后端服务器资源时,需要提供session信息。
  4. 如果session信息有效,则允许用户访问受限制的后端服务器,并且把渲染好的HTML页面返回前端。
  1. 用户向服务器发送用户名和密码
  2. 服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等。
  3. 服务器向用户返回一个session_id,写入用户的Cookie。
  4. 用户随后的每一次请求,都会通过Cookie,将session_id 传回服务器
  5. 服务器收到session_id,找到前期保存的数据,由此得知用户的身份)

 

Session认证的方式应用非常普遍,但也存在一些问题,扩展性不好,如果是服务器集群,或者是跨域的服务导向架构,就要求session数据共享,每台服务器都能够读取session,针对此种问题一般有两种解决方案:

  1. 一种解决方案是session数据持久化,写入数据库或别的吃就吃。各种服务收到请求后,都向持久层请求数据,这种方案的优点是架构清晰,缺点是工程量比较大。
  2. 一种方案是服务器不再保存session数据,所有数据都保存在客户端,每次请求都发回服务器。Token认证就是这种方案的一个代表。

基于token的认证系统

  1. 用户在登录域输入用户名和密码,点击登录。
  2. 请求发送后,后端服务器根据接受到的数据进行数据库查询以验证用户的合法性,如果请求有效,后端服务器则生成一个token,然后再响应头信息中添加这个token信息。
  3. 前端获取这个token时,将其保存到cookie或者localStorage中,每次请求应用中受限制的后端服务器资源时,需要提供token信息。
  4. 如果token有效,则允许用户访问受限制的后端服务器。

(token是在服务端产生的一串字符串,是客户端访问资源接口(API)时所需要的资源凭证,流程如下:

  1. 客户端使用用户名和密码请求登录,服务端收到请求,去验证用户名与密码。
  2. 验证成功后,服务端会签发一个token并把这个token发送给客户端
  3. 客户端收到token以后,会把它存储起来,比如放在cookie里或者localStorage里
  4. 客户端每次向服务端请求资源时需要带着服务器签发的token
  5. 服务端收到请求,然后去验证客户端请求里面带着的token,如果验证成功,就向客户端返回请求的数据)

 

基于token的用户认证是一种服务端无状态的认证方式,服务端不用存放token数据。用于解析token的计算时间换取session的存储空间,从而减轻服务器的压力,减少频繁的查询数据块。Token完全由应用管理,所以它可以避开同源策略。

JWT认证系统

JWT代表 JSON Web Token,它是一种用于认真头部的token格式。这个token可以实现两个系统之间以安全的方式传递信息。包含三个部分header、payloader和signature。

Header

header(头部)是token的一部分,用来存放token的类型和编码方式。通常使用base-64编码。Header部分是一个JSON对象,描述JWT的元数据

{

“alg”:“HS256”,

“typ”:“JWT”

}

alg属性表示签名的算法(algorithm),默认是HMAC SHA256(写成HS256)。

typ属性表示这个令牌(token)的类型(type),JWT令牌统一写成JWT;

最后,将上面的JSON对象使用Base64URL算法转成字符串。

Payload

payload(负载)也是JSON对象,包含了信息,你可以存放任一种信息,比如用户信息、产品信息等,他们都是使用base-64编码方式进行存储。

Signature

Signature(签名)包含了header,payload和秘钥(secret)的混合体,秘钥必须安全地存储在服务器。

三部分最终组合为完整的字符串,中间使用.分隔,如下:Header.Payload.Signature.

使用Header里面指定的签名算法(默认是HMAD SHA256),按照下面的公式产生签名。

HMADSHA256(base64UrlEncode(header)+”.”+base64UrlEncode(playload),secret。)

Token认证基本流程

基于token的身份验证方法,在服务端不需要存储用户登录记录,基本流程如下:

  1. 客户端使用用户名和密码请求登陆。
  2. 服务端收到请求,验证用户名和密码;验证成功,服务端会签发一个token,把这个token发送给客户端。
  3. 客户端收到token,把它存储起来(Cookie、Local Storage、session storage),客户端每次向服务端请求资源的时候,需要带着服务端签发的token;
  4. 服务端收到请求,验证请求里面的token,如果验证成功,就向客户端返回请求的数据。

(jwt的原理是:服务器认证以后,生成一个JSON对象,发回给用户,具体如下:

{

“姓名”:“张三”,

“角色”:“管理员”,

“到期时间”:“2018年7月1日18时20分”

};

用户与服务端通信的时候,都要发回这个JSON对象。服务器完全只靠这个对象认定用户身份;

为了防止用户纂改数据,服务器在生成这个对象的时候,会加上签名。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值