最近一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的登陆注册接口安全设计的更多相关文章

  1. 《java入门第一季》模拟用户登陆注册案例集合版

    需求:校验用户名和密码,登陆成功后玩猜数字小游戏. 在这里先写集合版.后面还有IO版.数据库版. 一.猜数字小游戏类: 猜数字小游戏的代码见博客:http://blog.csdn.net/qq_320 ...

  2. Java版本APP接口安全设计

    Java版本APP接口安全设计 安全设计分为两种: 1.传输安全. 2. 会话安全. 1.传输安全 怎么保证接口经过网络传输不被抓包获取? 1.如果只是使用对称性算法,破解APP拿到加密密钥就可以解密 ...

  3. 不用框架,原生使用python做注册接口/登陆接口/充值接口的测试,做的数据/代码分离

    注意充值时候,cookie的处理方法,还是原来的三种方法 1.操作数据文件  do_exclel.py # -*- conding:utr-8 -*- #@Time :2018/11/8 22:46 ...

  4. 微信小程序 使用HMACSHA1和md5为登陆注册报文添加指纹验证签名

    对接口请求报文作指纹验证签名相信在开发中经常碰到, 这次在与java后端一起开发小程序时,就碰到需求对登陆注册请求报文添加指纹验证签名来防止信息被修改 先来看下我们与后端定制签名规则 2.4. 签名规 ...

  5. HTTP API接口安全设计

    HTTP API接口安全设计 API接口调用方式 HTTP + 请求签名机制   HTTP + 参数签名机制 HTTPS + 访问令牌机制 有没有更好的方案? OAuth授权机制 OAuth2.0服务 ...

  6. Android通过Http连接MySQL 实现登陆/注册(数据库+服务器+客户端)

    写在最前: 在实际开发中,相信每个项目都会有用户登陆注册功能,这个实现的方法很多,下面是我实现的方法,供大家交流. 新人发帖,万分紧张,怎么样才能装作一副经常发帖的样子不被别人看出来呢-,- ? 好了 ...

  7. IdentityServer4【Topic】之登陆注册

    Sign-in 登陆注册 为了让标识服务器(identity server)代表用户发出令牌,该用户必须登录到标识服务器. Cookie authentication Cookie认证 身份验证是由来 ...

  8. C# 实现简单仿QQ登陆注册功能

    闲来没事,想做一个仿QQ登陆注册的winform,于是利用工作之余,根据自己的掌握和查阅的资料,历时4天修改完成,新手水平,希望和大家共同学习进步,有不同见解希望提出! 废话不多说,进入正题: 先来看 ...

  9. Django商城项目笔记No.5用户部分-注册接口-短信验证码

    Django商城项目笔记No.4用户部分-注册接口-短信验证码 短信验证码也保存在redis里(sms_code_15101234567) 在views中新增SMSCodeView类视图,并且写出步骤 ...

随机推荐

  1. Sqlserver日期操作

    Sqlserver日期操作 select GETDATE() as '当前日期', DateName(year,GetDate()) as '年', DateName(month,GetDate()) ...

  2. UNIX环境高级编程--7

    进程环境main函数:    C程序总是从main函数开始执行.main函数原型是:    int main(int argc, char *argv[]);    当内核执行C程序时(使用一个exe ...

  3. [ SCOI 2005 ] 最大子矩阵

    \(\\\) \(Description\) 给出一个\(N\times M\)的有权矩阵,选出其中\(K\)个互不重叠的子矩阵,使得这\(K\)个子矩阵的权值和最大. \(N\in [1,100]\ ...

  4. CSS——半透明

    1.opacity:不仅背景半透明,内部其他元素也半透明 2.rgba():只有背景半透明. <!DOCTYPE html> <html lang="en"> ...

  5. 从ABC到流利口语-unit01

    Unit 1 Introduction1 Good evening,everyone.It's a pleasure to you all. My name is Wang Dong.I'M from ...

  6. jsTree使用记录

    1. ajax请求生成jsTree <span style="font-size:14px;"><script> var r = []; // 权限树中被选 ...

  7. eclipse中代码整体左右移动的方法

    1.向左:将要移动的代码选中,然后按TAB键2.向右:将要移动的代码选中,然后按shift+tab键 kettas:  2009-8-21

  8. (转) SolrCloud之分布式索引及与Zookeeper的集成

    http://blog.csdn.net/ebay/article/details/46549481 作者:Wang, Josh 一.概述 Lucene是一个Java语言编写的利用倒排原理实现的文本检 ...

  9. linux搭建mysql服务器及可视化工具

    环境: ubutnu 18.4 mysql 5.7 参考: 安装 https://www.cnblogs.com/opsprobe/p/9126864.html 配置用户权限 https://baij ...

  10. NBXplorer的配置

    首先,必须安装bitcoin core bitcoin core启动时,会提示你定义数据存放目录,在数据存放目录下,找到bitcoin.conf文件,并填写内容: server=1rpcuser=rp ...