最近一APP产品,我担任的主要模块之一是后台登录注册模块的接口开发。基本完成,就说说并记录一下关于登录注册接口的一些东西,因为也涉及到接口的安全方面的问题。


1.先一般的app的登录注册接口安全设计上有两种主要:一个是token,另外一个是session保持

关于选型:如果你的app的接口和你后台管理系统的接口并不是一个接口的话,可以考虑用token的方式。token方式能减轻服务端的负担,由于不是共用接口,所以在代码逻辑上更有又是,比如对登录用户进行异地判断等操作,如果用session保持的方式,则又需要多了一层判断。代码又要时刻注意不影响到pc端的使用。

如果你们是属于前后端分离的话,用的shiro,那么可以考虑session共享的方式。让App端去保持session。这样的好处是代码量开发上能少维护一套接口,接口安全也完全交给shiro就行。但是劣势也很明显:修改pc代码的时候要考虑接口是否会影响到App端,而且由于长时间保持session,服务端的压力会较大。

2.开发逻辑上需要注意的一些事项:

2.1.前期需要确认好app注册上的一系列逻辑:比如是否单个手机号可以绑定多个第三方

如果是可以绑定多个第三方,需要在前期的数据库设计上考虑周全,第三方进行分表设计

2.2.对于app的游客的访问上要提前考虑好。

2.3.第三方登陆绑定手机是否需要设置默认密码根据产品而定。如果不需要,请用加密方式给予初始密码,如果用户首次手机登陆需要进行初始密码校验,引导用户去设置密码

2.2.关于头像的问题

第三方平台的头像不要直接保存在自己数据库,由于第三方平台的头像在用户在修改头像后,会导致该url失效,可以拿到url后上传到自己的平台。

2.3.关于第三方登陆的后台验证问题

由于第三方的uid和token是第三方平台给的,所以一定要在后台对该参数进行有效性判断。否则如果用户的uid被恶意获取,对该用户的信息可能是致命的。有两种方式验证:

2.3.1:app只传第三方的accessToken,后台进行接口判断该token是否存在于系统中,如果没有就去第三方的接口进行判断用户。

2.3.2:app将uid和token都传过来,后台进行校验是否存在,如果不匹配就去第三方接口校验。

区别在于调用的接口不同而已,对于某些第三方平台如果支持accessToken和你的appid进行校验则采用该方式。

3.对于采用token方式,授予app token的时候,不要采用token加密的方式,比如jwt,如果采用该方式。被恶意者知道的加密方式,将会是致命的。

对于token可以后台随机生成uuid,然后将对应的用户信息已key-value的形式存到redis,在存value的时候可以考虑加上当前用户的ip,token生成时间等,在过滤器中进行一系列的校验。在请求的时候查看该token是否在redis有对应的值。另外,如果帐号只能同时登陆1个的话,可以在加一个redis值,用户id对应token。每次登陆,都将原先的token从系统中擦除。

4.对应session的方式,session过期后,统一返回code,然后app在进行调用登陆接口。

5.其他注意事项:

5.1:后台尽量前期与app人员说好上线后采用https协议。这样他们在前期也会做好对应的代码设计,不然上线前要增加,他们可能未考虑到,将会很麻烦。

5.2:接口设计尽量简单,单个接口只完成一个功能。因为在app中,很多调用逻辑并不是像pc那样在一个页面能完成,开发中多与前段人员沟通。如果你不了解前端的开发上,请虚心请教

5.3:后期待补充


补充一个系统的登陆注册接口流程图

最新文章

  1. iscroll
  2. 《Linux内核设计与实现》 Chapter4 读书笔记
  3. Maven 如何为不同的环境打包 —— 开发、测试和生产环境
  4. gcc makefile
  5. ZOJ-3725 Painting Storages DP
  6. 利用NSInvocation对方法进行抽象,实现对方法的加锁
  7. Collections类方法详解
  8. eclipse安装
  9. 毕向东udp学习笔记1
  10. Vijos 1006 晴天小猪历险记之Hill 单源单汇最短路
  11. NavMesh--导航网格寻路
  12. Java线程同步锁
  13. python selenium ——— 动态id、class定位
  14. 使用javascript调用com组件
  15. IDEA--生成jar包并且导出jar包
  16. (转)junit简介
  17. NTT模板
  18. numpy中 array数组的shape属性
  19. python 求3到8位数的水仙花数Pycharm实现
  20. Apache Oltu 实现 OAuth2.0 服务端【授权码模式(Authorization Code)】

热门文章

  1. 68. 对Extjs中store的多种操作
  2. PCB SQL Server 代码创建DbLink
  3. bzoj1877 晨跑(费用流)
  4. [Apple开发者帐户帮助]八、管理档案(4)
  5. [Swift通天遁地]五、高级扩展-(13)图片资源本地化设置:根据不同的语言环境显示不同语言版本图片
  6. [Swift通天遁地]七、数据与安全-(7)创建文件浏览器:以可视化的方式浏览沙箱文件
  7. Java中JPS命令监控
  8. idea git项目修改后无法提交 颜色都是灰色
  9. 使用Visual Studio Code + Node.js搭建TypeScript开发环境
  10. java 重载父类报错 Remove '@override' annotation解决办法