移动 APP 端与服务器端用户身份认证的安全方案
最近要做一个项目是java开发后端服务,然后移动APP调用。由于之前没有接触过这块,所以在网上搜索相关的方案。然后搜到下面的一些方案做一些参考。
公司的 mobile app 是外包给其他公司做的,所以现在他们需要我们提供 API 接口进行调试,由于没有 API 开发的经验,所以现在一个比较难把握的问题就是如何实现服务器端与移动 APP 端通信时的用户身份认证问题。
搜集了一些资料,大部分的建议是在服务器端生成一个 token 然后在通信报文的 headers 利用这个 token 来进行验证。
这里有两个问题,首先这样直接生成 token 进行认证的安全性。其次,生成的 token 应该怎么保存呢?存在 DB 里面还是哪个地方?(服务器端使用的是 php) 因为本身产品对安全性要求不是特别高,远没有达到网银之类的需求,所以在不考虑使用 oauth 等授权协议基础上,我比较希望知道一些常用的身份验证机制,以保证基本的安全性即可。 再把问题写清楚点:
1.怎么生成安全性比较高的 token。
2.token 需不需要设置过期时间(考虑到是 mobile app,所以这个比较难设计,因为很少
有人会在 app 上会 log out 再重新登录)。
3.token 除了存在 db 内,有没有一些更方便合适的方式。
6 个回答
peixinchen 111 2014年04月29日 回答
- APP里预埋一个token,结合时间戳/每次请求的一个随机值randstr,生成一个最终signature,在Server进行验证即可,(安全级别不是很高,但防大部分恶意请求没问题了)。
- 如果还需要针对不同用户生成不同的sigature,可以结合手机的DeviceId,在首次请求是上报这个,以后的请求就把DeviceId也作为因子带入sigature的生成里。当然,这个过程也不是绝对安全的。
看你的意思是不需要绝对安全的,所以猜测你的目的是防恶意请求的,以上两种方式应该可以满足了。
告诉你一个很好的学习方式,去各大网站,微博、腾讯、Facebook、Google,看他们的OpenApi是怎么实现的,需要提供什么样的参数,你就可以依葫芦画瓢做出来了。
- token一般可以用用户名和密码处理后生成。
- token过期可做可不做,如果移动端发现token过期则跳到登录界面让用户重新登录即可。
- 你是指客户端存token的地点还是服务器端?一般都可以存在数据库中,不过对移动设备来说存在XML中作为键值对更为普遍。
首先回答第三个问题:存在rdb不妥,本来保存的就是临时数据,没有持久化的必要,用缓存即可,memcached/redis均可。
为何说是临时数据,token本来是用来做授权的,应当只能允许可信用户使用,假如是长久数据,那么一旦token泄露,就难免会造成伪造访问的风险。
不知道提主的应用是用什么做用户认证,假定是传统的用户名密码认证方式,其实可以参考http的session,认证通过后生成的sessionid信息其实就可以作为后续访问的token。用户每次请求是携带uid+sid信息来即可,通过sid反查uid或者uid查询sid,然后匹配即可。在token超时时让用户重新来申请即可。对于移动端,建议走https通道。
如何生成安全性高的token,常规的签名算法就可以了,毕竟是不可逆的,原串组合方式不泄露就行,md5的话记得加盐。
对于在app中内置token的做法不建议。首先,内置的token所有应用统一呢?这样获取到了token,基本就可以伪造了,不同的设备不同呢?其实也差不多。而且这样实现起来也比较负责,因为server端要进行验证,猜测应当是用对称加密算法,签名验证?其实最大的疑问是真能用来授权么?我看题主提到了多账户的问题,那么设备与用户就不是一一对应的关系。
最简单用session,业务层上不用做太大的变动,呵呵。
移动 APP 端与服务器端用户身份认证的安全方案的更多相关文章
- 构建具有用户身份认证的 React + Flux 应用程序
原文:Build a React + Flux App with User Authentication 译者:nzbin 译者的话:这是一篇内容详实的 React + Flux 教程,文章主要介绍了 ...
- 构建具有用户身份认证的 Ionic 应用
序言:本文主要介绍了使用 Ionic 和 Cordova 开发混合应用时如何添加用户身份认证.教程简易,对于 Ionic 入门学习有一定帮助.因为文章是去年发表,所以教程内关于 Okta 的一些使用步 ...
- webapp用户身份认证方案 JSON WEB TOKEN 实现
webapp用户身份认证方案 JSON WEB TOKEN 实现Deme示例,Java版 本项目依赖于下面jar包: nimbus-jose-jwt-4.13.1.jar (一款开源的成熟的JSON ...
- Django:学习笔记(9)——用户身份认证
Django:学习笔记(9)——用户身份认证 User
- PHP中对用户身份认证实现两种方法
用户在设计和维护站点的时候,经常需要限制对某些重要文件或信息的访问.通常,我们可以采用内置于WEB服务器的基于HTTP协议的用户身份验证机制. 当访问者浏览受保护页面时,客户端浏览器会弹出对话 ...
- Keycloak 13 自定义用户身份认证流程(User Storage SPI)
Keycloak 版本:13.0.0 介绍 Keycloak 是为现代应用程序和服务提供的一个开源的身份和访问管理的解决方案. Keycloak 在测试环境可以使用内嵌数据库,生产环境需要重新配置数据 ...
- 在Asp.net MVC中使用Authorization Manager (AzMan)进行Windows用户身份认证
背景 创建需要通过Windows用户进行身份认证的Asp.net MVC应用 要点 在Asp.net MVC应用基于Windows用户进行身份认证的方法有很多,如MVC自带的Windows认证就经常被 ...
- PHP 使用 jwt 方式用户身份认证
封装类 // +---------------------------------------------------------------------- // | Created by PhpSt ...
- 《图解Http》8: 用户身份认证Cookie管理session; 9:HTTP的追加协议(websoket, webDAV)
基本认证,(安全等级低,多数网站不使用) Digest认证:(也不怎么用) SSL客户端认证:(凭借客户端证书认证,如网银登陆) 表单认证:用户名/密码.(常用) SSL客户端认证采用two-fact ...
随机推荐
- 安装Mailx到CentOS(YUM)
运行环境 系统版本:CentOS Linux release 7.3.1611 (Core) 软件版本:无 硬件版本:无 安装过程 1.配置网络 [root@localhost ~]# vi /etc ...
- day36_tomcat丶servlet入门
web相关概念回顾 软件架构 常见的软件结构有下面2种 Client/Server 客户端/服务器端 简称C/S 特点:在用户本地有一个客户端程序,在远程有一个服务器端程序 如:QQ,迅雷...等等 ...
- .NET MVC强类型参数排除和包含
MVC接收强类型对象时排除或只接收某几个属性使用Bind特性 只接收几个属性:Bind(Include="属性1,属性2,属性3,...") 排除某几个属性:Bind(Exclud ...
- Process、管理者权限、注册表、xml修改
//判断是否有管理者权限 WindowsPrincipal principal = new WindowsPrincipal(WindowsIdentity.GetCurrent()); if (!p ...
- 英语语法 ( Spoken language )
- - - -------------- 1,五个语序: 主语+谓语(中英语序一致)主语+系动词+表语 (中英语序一致)主语+谓语+宾语(中英语序一致)主语+谓语+间宾+直宾(中英语序一致)主语+谓语 ...
- CentOS7防火墙设置常用命令
目录 开/关/重启防火墙 查看所有开启的端口号 CentOS7环境下防火墙常用命令 开/关/重启防火墙 查看防火墙状态 firewall-cmd --state 启动防火墙 systemctl sta ...
- 用友UAP NC 单据节点_打开参照字段的问题_从打不开参照放大镜_到成功打开了但是取不到值_到修复成功
项目的这个功能是17年开发的,但是当时没有测试通过,今年拿出来测试(通过后会上线). 有两个表数据一开始只打算用来计算时查询,没打算放到目标单据中做表体参照字段.后来改细节问题后放到目标单据中做参照字 ...
- 如何通过 SSH/Telnet 用 root 权限登录群晖
出于系统安全原因,对 Synology NAS 的 root 访问有限.如果您获取 root 权限,请在命令行界面中用任何属于Local Administrators群组的帐户证书登录 DSM(如Pu ...
- Connections in Galaxy War ZOJ - 3261 离线操作+逆序并查集 并查集删边
#include<iostream> #include<cstring> #include<stdio.h> #include<map> #includ ...
- 03-SV过程语句和子程序
1.过程语句 for语句.do-while语句.while语句 initial begin string cmd; int file,c; $display("=========== con ...