移动 APP 端与服务器端用户身份认证的安全方案

最近要作一个项目是java开发后端服务,而后移动APP调用。因为以前没有接触过这块,因此在网上搜索相关的方案。而后搜到下面的一些方案作一些参考。php

 

原文:移动 APP 端与服务器端用户身份认证的安全方案java

公司的 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日 回答
  1. APP里预埋一个token,结合时间戳/每次请求的一个随机值randstr,生成一个最终signature,在Server进行验证便可,(安全级别不是很高,但防大部分恶意请求没问题了)。
  2. 若是还须要针对不一样用户生成不一样的sigature,能够结合手机的DeviceId,在首次请求是上报这个,之后的请求就把DeviceId也做为因子带入sigature的生成里。固然,这个过程也不是绝对安全的。

看你的意思是不须要绝对安全的,因此猜想你的目的是防恶意请求的,以上两种方式应该能够知足了。web

 

wenhx 131  2014年04月29日 回答

告诉你一个很好的学习方式,去各大网站,微博、腾讯、Facebook、Google,看他们的OpenApi是怎么实现的,须要提供什么样的参数,你就能够依葫芦画瓢作出来了。redis

 

 
远方的落日 63  2014年04月29日 回答
  1. token通常能够用用户名和密码处理后生成。
  2. token过时可作可不作,若是移动端发现token过时则跳到登陆界面让用户从新登陆便可。
  3. 你是指客户端存token的地点仍是服务器端?通常均可以存在数据库中,不过对移动设备来讲存在XML中做为键值对更为广泛。

 

 
 
 
_404_MrYes 103  2014年05月07日 回答 · 2014年05月08日 更新

首先回答第三个问题:存在rdb不妥,原本保存的就是临时数据,没有持久化的必要,用缓存便可,memcached/redis都可。算法

为什么说是临时数据token原本是用来作受权的,应当只能容许可信用户使用,假如是长久数据,那么一旦token泄露,就不免会形成伪造访问的风险。数据库

不知道提主的应用是用什么作用户认证,假定是传统的用户名密码认证方式,其实能够参考http的session,认证经过后生成的sessionid信息其实就能够做为后续访问的token。用户每次请求是携带uid+sid信息来便可,经过sid反查uid或者uid查询sid,而后匹配便可。在token超时时让用户从新来申请便可。对于移动端,建议走https通道。segmentfault

如何生成安全性高的token,常规的签名算法就能够了,毕竟是不可逆的,原串组合方式不泄露就行,md5的话记得加盐。后端

对于在app中内置token的作法不建议。首先,内置的token全部应用统一呢?这样获取到了token,基本就能够伪造了,不一样的设备不一样呢?其实也差很少。并且这样实现起来也比较负责,由于server端要进行验证,猜想应当是用对称加密算法,签名验证?其实最大的疑问是真能用来受权么?我看题主提到了多帐户的问题,那么设备与用户就不是一一对应的关系。缓存

 

 
 
web_focus 86  2014年04月30日 回答

最简单用session,业务层上不用作太大的变更,呵呵。安全

 

小熊油耗 30  4月3日 回答

应该采用 OAuth 2.0 Client Credentials Grant(最容易),或者 JSON Web Token模型(安全性更高)

相关文章
相关标签/搜索