分享

设计适配多端的API接口及JWT在token验证中的应用

 huowufenghuang 2019-01-07
t随着移动互联网业务的兴起与发展,对我们的系统提出了更高的要求:需要我们的系统适配不同端(PC,Android,IOS)的资源请求。

而这也是现在技术更新的一个趋势:前后端彻底分离的要求,nodejs的出现使得先后端分离的更彻底,传统意义的后台server只需要提供接口数据给前台browser

前台browser利用各种前台mvvm框架实现其纷繁复杂的各种个性化效果,这样使得前后台只能划分更明确,开发效率更高,实现更好的前后台工程化管理。

目前大多采用RESTful的规范作为借口设计的指南,该规范最大的特点就是:无状态,使用uri标识资源。关于RESTful API的相关知识推荐一个好资源:RESTful架构风格概述

做过微信开发的都知道,微信支付的时候首先要请求一个接口返回access_token和expires_in,这样做的目的是为了做用户校验,保证安全性。

如果我们自己要开发一套多端适配的RESTful API我们怎么去设计呢?这个问题一直在困扰我,如何保证安全性,我的RESTful API虽是无状态请求,但是不能安全暴露在互联网中,这样一来安全性没有保障(恶意数据注入,删除等),二来如何识别非我方接入系统的请求并拒绝(占用带宽)

这就需要一套用户校验和认证的功能,悉知目前有几种流行的解决方案:OAuth2和JWT(JSON Web Token)

今天主要看JWT:

JWT 的原理是这样的:客户端使用客户名和密码去请求服务端的时候,服务端返回一个JSON Web Token,客户端根据自己端的情况可以保存在cookie或则localstorage中,当客户端要请求资源uri的时候就在头部带上这个JSON Web Token,一般是在 header 的 Authorization 使用 Bearer 的形式,一个包含的 JWT 的请求头的 Authorization 如下:Authorization: Bearer <token>

 

这样的API就完美解决了跨域问题,一般在服务端使用redis来管理我们的JSON Web Token,具体实现是:使用redis来保存Token和UUID(用户唯一标示)的key-value键值对,程序中设置管理token的失效。具体的实现参考:RESTful登陆设计(基于Spring及Redis的Token鉴权)

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多