App的登陆注册接口安全设计
最近一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:后期待补充
补充一个系统的登陆注册接口流程图
App的登陆注册接口安全设计的更多相关文章
- 《java入门第一季》模拟用户登陆注册案例集合版
需求:校验用户名和密码,登陆成功后玩猜数字小游戏. 在这里先写集合版.后面还有IO版.数据库版. 一.猜数字小游戏类: 猜数字小游戏的代码见博客:http://blog.csdn.net/qq_320 ...
- Java版本APP接口安全设计
Java版本APP接口安全设计 安全设计分为两种: 1.传输安全. 2. 会话安全. 1.传输安全 怎么保证接口经过网络传输不被抓包获取? 1.如果只是使用对称性算法,破解APP拿到加密密钥就可以解密 ...
- 不用框架,原生使用python做注册接口/登陆接口/充值接口的测试,做的数据/代码分离
注意充值时候,cookie的处理方法,还是原来的三种方法 1.操作数据文件 do_exclel.py # -*- conding:utr-8 -*- #@Time :2018/11/8 22:46 ...
- 微信小程序 使用HMACSHA1和md5为登陆注册报文添加指纹验证签名
对接口请求报文作指纹验证签名相信在开发中经常碰到, 这次在与java后端一起开发小程序时,就碰到需求对登陆注册请求报文添加指纹验证签名来防止信息被修改 先来看下我们与后端定制签名规则 2.4. 签名规 ...
- HTTP API接口安全设计
HTTP API接口安全设计 API接口调用方式 HTTP + 请求签名机制 HTTP + 参数签名机制 HTTPS + 访问令牌机制 有没有更好的方案? OAuth授权机制 OAuth2.0服务 ...
- Android通过Http连接MySQL 实现登陆/注册(数据库+服务器+客户端)
写在最前: 在实际开发中,相信每个项目都会有用户登陆注册功能,这个实现的方法很多,下面是我实现的方法,供大家交流. 新人发帖,万分紧张,怎么样才能装作一副经常发帖的样子不被别人看出来呢-,- ? 好了 ...
- IdentityServer4【Topic】之登陆注册
Sign-in 登陆注册 为了让标识服务器(identity server)代表用户发出令牌,该用户必须登录到标识服务器. Cookie authentication Cookie认证 身份验证是由来 ...
- C# 实现简单仿QQ登陆注册功能
闲来没事,想做一个仿QQ登陆注册的winform,于是利用工作之余,根据自己的掌握和查阅的资料,历时4天修改完成,新手水平,希望和大家共同学习进步,有不同见解希望提出! 废话不多说,进入正题: 先来看 ...
- Django商城项目笔记No.5用户部分-注册接口-短信验证码
Django商城项目笔记No.4用户部分-注册接口-短信验证码 短信验证码也保存在redis里(sms_code_15101234567) 在views中新增SMSCodeView类视图,并且写出步骤 ...
随机推荐
- bzoj2242 [SDOI2011]计算器——BSGS
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2242 第一次写BSGS,参考了好多好多博客: 然而看到的讲解和模板是一种写法,这道题的网上题 ...
- centos6.4 ssh免密码登陆(只需三个步骤)
学习Hadoop的时候,用到的.这里作为记录. 以下是最简洁的方式: 4台虚拟机: 用户:root.hadoop hostname 分别是:Master.Hadoop.Slave1.Hadoop.Sl ...
- PCB 加投率计算实现基本原理--K最近邻算法(KNN)
PCB行业中,客户订购5000pcs,在投料时不会直接投5000pcs,因为实际在生产过程不可避免的造成PCB报废, 所以在生产前需计划多投一定比例的板板, 例:订单 量是5000pcs,加投3%,那 ...
- U盘在电脑上安装CentOS 7 系统过程详解
U盘制作CentOS系统启动盘 在电脑上下载并安装UltraISO软件,如百度云:http://pan.baidu.com/s/1hrGtvEG 打开UltraISO软件,找到CentOS.iso的映 ...
- http通讯基础
1 . 一个网页包括 JS CSS Html 2 . 状态码:200 正常 302 临时重定向 (类似呼叫转移) 304 未修改,客户端缓存的信息是最新的,无需到服务器重新获取 403 ...
- ThreadLocal原理及用法详解
背景 一直以来对ThreadLocal用法模棱两可,不知道怎么用今天好好研究了下给大家分享下. 1.讲解ThreadLocal之前先回顾下什么是取模.x^y.弱引用. 1. 取模运算实际上是计算两数相 ...
- Java根据年度将数据分组
现在有这么一组数据 code name year 45615654 x1 ...
- JVM-垃圾回收器
目录 垃圾收集器 Serial收集器 Serial Old 收集器 ParNew 收集器 Parallel Scavenge 收集器 (并行清除) /'pærəlɛl/ /'skævɪndʒ/ Par ...
- 334 Increasing Triplet Subsequence 递增的三元子序列
给定一个未排序的数组,请判断这个数组中是否存在长度为3的递增的子序列.正式的数学表达如下: 如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ≤ n-1, ...
- 安装office1406错误!!!急死个人。。。。。
因为用到Microsoft.Office.Interop.Word,将word转PDF.所以在服务器上需要安装office,但是报错1406,不能将值插入注册表..... 然后百度各种问题,说需要将注 ...