最近要做一个项目是java开发后端服务,然后移动APP调用。由于之前没有接触过这块,所以在网上搜索相关的方案。然后搜到下面的一些方案做一些参考。

原文:移动 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日 回答

  1. APP里预埋一个token,结合时间戳/每次请求的一个随机值randstr,生成一个最终signature,在Server进行验证即可,(安全级别不是很高,但防大部分恶意请求没问题了)。
  2. 如果还需要针对不同用户生成不同的sigature,可以结合手机的DeviceId,在首次请求是上报这个,以后的请求就把DeviceId也作为因子带入sigature的生成里。当然,这个过程也不是绝对安全的。

看你的意思是不需要绝对安全的,所以猜测你的目的是防恶意请求的,以上两种方式应该可以满足了。

wenhx 131 2014年04月29日 回答

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

 
远方的落日 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通道。

如何生成安全性高的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模型(安全性更高)

 

移动 APP 端与服务器端用户身份认证的安全方案的更多相关文章

  1. 构建具有用户身份认证的 React + Flux 应用程序

    原文:Build a React + Flux App with User Authentication 译者:nzbin 译者的话:这是一篇内容详实的 React + Flux 教程,文章主要介绍了 ...

  2. 构建具有用户身份认证的 Ionic 应用

    序言:本文主要介绍了使用 Ionic 和 Cordova 开发混合应用时如何添加用户身份认证.教程简易,对于 Ionic 入门学习有一定帮助.因为文章是去年发表,所以教程内关于 Okta 的一些使用步 ...

  3. webapp用户身份认证方案 JSON WEB TOKEN 实现

    webapp用户身份认证方案 JSON WEB TOKEN 实现Deme示例,Java版 本项目依赖于下面jar包: nimbus-jose-jwt-4.13.1.jar (一款开源的成熟的JSON ...

  4. Django:学习笔记(9)——用户身份认证

    Django:学习笔记(9)——用户身份认证 User

  5. PHP中对用户身份认证实现两种方法

    用户在设计和维护站点的时候,经常需要限制对某些重要文件或信息的访问.通常,我们可以采用内置于WEB服务器的基于HTTP协议的用户身份验证机制.     当访问者浏览受保护页面时,客户端浏览器会弹出对话 ...

  6. Keycloak 13 自定义用户身份认证流程(User Storage SPI)

    Keycloak 版本:13.0.0 介绍 Keycloak 是为现代应用程序和服务提供的一个开源的身份和访问管理的解决方案. Keycloak 在测试环境可以使用内嵌数据库,生产环境需要重新配置数据 ...

  7. 在Asp.net MVC中使用Authorization Manager (AzMan)进行Windows用户身份认证

    背景 创建需要通过Windows用户进行身份认证的Asp.net MVC应用 要点 在Asp.net MVC应用基于Windows用户进行身份认证的方法有很多,如MVC自带的Windows认证就经常被 ...

  8. PHP 使用 jwt 方式用户身份认证

    封装类 // +---------------------------------------------------------------------- // | Created by PhpSt ...

  9. 《图解Http》8: 用户身份认证Cookie管理session; 9:HTTP的追加协议(websoket, webDAV)

    基本认证,(安全等级低,多数网站不使用) Digest认证:(也不怎么用) SSL客户端认证:(凭借客户端证书认证,如网银登陆) 表单认证:用户名/密码.(常用) SSL客户端认证采用two-fact ...

随机推荐

  1. 剑指offer-拓展训练-N皇后的问题-全排列

    /* 题目: N皇后的问题. */ /* 思路: 全排列. 声明一个具有N个元素的数组curr,每个下标i(0>i>n)代表行,每个curr[i]代表列,所以初始化为curr[i] = i ...

  2. TC SRM556 OldBridges

    题意 有一个包含\(n\)个点的图,点的编号分别为\(0\)到\(n-1\).有若干双向边连接两个点,有些边可以经过无限次,有些边最多只能经过(双向)两次.Alice计划从\(a1\)到\(a2\)进 ...

  3. 【笔记】机器学习 - 李宏毅 - 2 - Regression + Demo

    Regression 回归 应用领域包括:Stock Market Forecast, Self-driving car, Recommondation,... Step 1: Model 对于宝可梦 ...

  4. windows 停止和启动Redis

    点击win+R   输入cmd 打开cmd窗口 然后输入命令 net stop redis    停止redis net start redis     启动redis

  5. JS DOM操作(创建、遍历、获取、操作、删除节点)

    创建节点 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="u ...

  6. 【巨杉数据库SequoiaDB】巨杉Tech | 巨杉数据库的并发 malloc 实现

    本文由巨杉数据库北美实验室资深数据库架构师撰写,主要介绍巨杉数据库的并发malloc实现与架构设计.原文为英文撰写,我们提供了中文译本在英文之后. SequoiaDB Concurrent mallo ...

  7. ALSA Lib-简单的播放例子

    参考:https://www.alsa-project.org/alsa-doc/alsa-lib/_2test_2pcm_8c-example.html #include <stdio.h&g ...

  8. Spring里面AOP的和IOC的理解

    1.Spring里面AOP的理解:https://www.cnblogs.com/hongwz/p/5764917.html例如日志功能.日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心 ...

  9. 申请一个美国paypal账户

    近期为了做PayPal支付,进口demo已经写好,就差一个美国PayPal账户进行支付测试,几经折腾,终于申请下来,附上参考链接:   paypal官网: https://www.paypal.com ...

  10. 树莓派操作案例1-使用python GPIO+TB6612驱动步进电机

    原理图: 接口说明 A控制信号输入------PWMA               VM ------电机驱动电压输入端(4.5V-15V) A电机输入端2 ------AIN2           ...