Token
传统的认证系统
1.用户在登录域输入 用户名 和 密码 ,然后点击 登录 ;
2.请求发送之后,通过在后端查询数据库验证用户的合法性。如果请求有效,使用在数据库得到的信息创建一个 session,然后在响应头信息中返回这个 session 的信息,目的是把这个 session ID 存储到浏览器中;
3.在访问应用中受限制的后端服务器时提供这个 session 信息;
4.如果 session 信息有效,允许用户访问受限制的后端服务器,并且把渲染好的 HTML 内容返回。
缺点:
在移动应用上 session 和 cookie 行不通。你无法与移动终端共享服务器创建的 session 和 cookie。
在这个应用中,渲染好的 HTML 被返回。但在移动端,你需要包含一些类似 JSON 或者 XML 的东西包含在响应中。
基于 token 的认证
1.用户在登录表单中输入 用户名 和 密码 ,然后点击 登录 ;
2.请求发送之后,通过在后端查询数据库验证用户的合法性。如果请求有效,使用在数据库得到的信息创建一个 token,然后在响应头信息中返回这个的信息,目的是把这个 token 存储到浏览器的本地存储中;
3.在每次发送访问应用中受限制的后端服务器的请求时提供 token 信息;
4.如果从请求头信息中拿到的 token 有效,允许用户访问受限制的后端服务器,并且返回 JSON 或者 XML。
JWT(jsonwebtoken)
JWT:不记名的token,由三部分组成:header、payload、signature
header:是 token 的一部分,用来存放 token 的类型和编码方式,通常是使用 base-64 编码。
payload:包含了信息。你可以存放任一种信息,比如用户信息,产品信息等。它们都是使用 base-64 编码方式进行存储。
signature:包括了 header,payload 和密钥的混合体。密钥必须安全地保存储在服务端。
在使用jwt的时候,首先先加载jwt,用jwt.sign加密token,用jwt.verify解密token
|
|
jwt.sign中将对象数据通过serect密钥配合算法加密,expiresIn是保存的时间,单位是毫秒,结果是一串很长的字符串
jwt.verify将token中很长的字符串再次通过密钥’serect’解密,返回的结果是一个对象,里面有之前加密的对象属性,还有创建token的时间和保存时间