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类视图,并且写出步骤 ...
随机推荐
- 9.11NOIP模拟题
NOIP模拟赛 by thmyl 题目名称 superman market Lemon_Soda 可执行文件名 superman market Lemon_Soda 输入文件 superman.i ...
- Swagger 教程
转自 Vojtech Ruzicka的编程博客 (一)Swagger和SpringFox 记录REST API非常重要.它是一个公共接口,其他模块,应用程序或开发人员可以使用它.即使你没有公开曝光 ...
- zookeeper集群安装及使用详解
1. Zookeeper简介 ZooKeeper是一个开源的分布式框架,提供了协调分布式应用的基本服务.它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronizatio ...
- JavaScript判断对象数组中是否存在某个对象【转】
1. 如果要判断数组中是否存在某个元素的话很好判断,直接用数组的indexOf方法就好,存在返回当前索引不存在返回-1 var arr=[1,2,3,4] arr.indexOf(3) arr.ind ...
- 3最短路的几种解法 ------例题< 最短路 >
点击进入例题 最短路 我知道的有三种方法 1 : 深搜 每次 每次有更小的路径时 就更新 , 2 : Dijkstra 3 : floyd 前两种 是 单源 最短路径 ...
- Codeforces 769C
很久没有发题解,今天这题卡了下百度没看到相关题解,最后还是看了官方题解才找到原本思路的bug过的. 题意:给出一个二维迷宫,*表示墙,. 表示路,X表示起点,问一个长度为k的路径,从X出发并且回到X, ...
- go语言Notepad++简易开发环境搭建(windows)
1.下载安装go语言:https://golang.org/dl/选择对应的平台,建议使用msi安装包,这个会帮你配置好环境变量(也许需要重启)对应的环境变量有: GOROOT - C:\Go\PAT ...
- Laravel5.1学习笔记17 数据库3 数据迁移
介绍 建立迁移文件 迁移文件结构 执行迁移 回滚迁移 填写迁移文件 创建表 重命名/ 删除表 创建字段 修改字段 删除字段 建立索引 删除索引 外键约束 #介绍 Migrations are lik ...
- python算数运算符
---恢复内容开始--- 加减乘除 >>> 1+1 2 >>> 4-2 2 >>> 2*5 10 >>> 8/2 4.0 > ...
- SV creation order
SystemVerilog Instance Worlds When generating an UVM testbench and in particular the DUT - testbench ...