登录 免费注册

App中用户验证方案 - 朗尊软件,企业级电商平台提供商

2019-12-21 阅读:4384
分类:技术前沿
电商系统Java商城APP
传统Web网站使用Cookie+Session保持用户的登录状态,浏览器都有cookie,每次请求会带回sessionid,这样应用服务器就找出对应的session。业务逻辑里只要看session里有没有用户信息。

作者:Tony


基本的用户登录方案

传统Web网站使用Cookie+Session保持用户的登录状态,浏览器都有cookie,每次请求会带回sessionid,这样应用服务器就找出对应的session。业务逻辑里只要看session里有没有用户信息。

那么在App后台怎么实现类似的功能呢?在App后台怎么避免每次验证用户身份都需要传输用户名和密码呢?

数据在网络的传输过程中,避免数据泄漏,最基本的方案是所有涉及安全性的API请求都必须使用HTTPS协议。这个方案这边就不细谈了,

读者看看支付宝涉及登录和支付的页面,URL都是以HTTPS开头,这就意味通信是使用HTTPS。国内主流开放平台的API,例如新浪微博、腾讯等,API请求都是以HTTPS开头。

APP授权常用的方式有:

1、OAuth:

OAuth(开放授权)是一个开放的授权标准,允许用户让第三方应用访问该用户在某一web服务上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。

OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的第三方系统(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth让用户可以授权第三方网站访问他们存储在另外服务提供者的某些特定信息,而非所有内容

下面是OAuth2.0的流程:

这种基于OAuth的认证机制适用于个人消费者类的互联网产品,如社交类APP等应用,但是不太适合拥有自有认证权限管理的企业应用;

常用的方式可以基于Spring-auth2框架来实现;


2.基于Token方式:


类似与 JSON Web Token(JWT) Token认证机制的实现;

我们LegendShop就是基于这种方式实现App认证授权;

APP登录的时候发送加密的用户名和密码到服务器,服务器验证用户名和密码,如果成功,以某种方式比如加密随机串作为token,存储到服务器中,并返回token到APP,以后APP请求时,凡是需要验证的地方(比如用户中心的链接)都要带上该token,然后服务器端验证token,成功返回所需要的结果,失败返回错误信息,让他重新登录。其中服务器上token设置一个有效期,每次APP请求的时候都验证token和有效期。(Token信息可以存放在memcached、redis)。

如下图:

登录过程:

实现思路:

• 第一次认证:第一次登录,用户从浏览器输入用户名/密码,提交后到服务器的登录处理的Action层(Login Action);

• Login Action调用认证服务进行用户名密码认证,如果认证通过,Login Action层调用用户信息服务获取用户信息(包括完整的用户信息及对应权限信息);

• 返回用户信息后,Login Action 生成Token的秘钥信息,并且存储至服务器中。

• 完成数据签名后,返回Json信息,完成登录过程;

1、服务端app token 授权表结构:

securiyCode:随机生成安全码;就是所谓的钥匙。

accessToken:随机生成;

2、用户登录成功。存储服务器中,返回Token串信息:

第一次登录存储在数据库或者Nosql数据库中:

成功返回给客户端结果:

{"accessToken":"0lPisdlBrN3V91FIjXNkkMvDJFF2fC","securiyCode":"sAkDReaj","userId":"132456","userName":"tony","verId":"V1.0"}

Android将这些信息存在SQLlite中.


3、 请求认证

如: APP用户访问 用户中心链接 : http://viemall.cn/u/orders

• 客户端(APP客户端或浏览器)通过GET或POST请求访问资源(页面或调用API)并在在每一次需要认证的请求中都带上完成签名的Token信息,我们是网络请求通信报文的headers     设置每 一次带过去的Token验证信息,后台基于过滤器来校验这个Token的有效性及是否过期;

获取传输的信息:

1
2
3
4
String userId = request.getHeader("userId");
String userName = request.getHeader("userName");
String accessToken = request.getHeader("accessToken");
String code = request.getHeader("code");

对Token信息进行解密和解码,进行数据校验:

1
2
3
4
5
6
StringBuffer content = new StringBuffer().append(userId).append(userName).
append(accessToken).append(time).append(verId).append(appToken.getSecuriyCode());
String validateCode = MD5Util.toMD5(content.toString());
if(validateCode.equals(code) ){
return true;
}

文章来源:广州朗尊软件科技有限公司
【朗尊软件】是中国领先的专业电商平台提供商,秉承着“专业塑造传奇,用心成就电商”的理念, 专注于为用户提供一体化的电商解决方案及服务,搭建垂直行业垂直电商一站式营销管理工具。目前拥有自主研发的电子商务平台产品:SAAS云平台、微商城小程序、云商城、云小店、代理商平台、B2B2C商城、B2B大宗交易平台、跨境电商服务、大数据平台搭建、微服务架构等产品、各种定制商城及解决方案。
网站声明:以上内容为朗尊软件官方网站的原创文章,如需转载,请注明出处,谢谢合作!
上一篇:一条“互联网+现代农业”的新路径
下一篇:Legendshop后台操作手册(一)
相关文章

供应链合作中如何处理数据保护问题?

发表时间: 2023-05-19

B2B2C多用户商城小程序定制:构建一个富有创新与活力的商城

发表时间: 2023-09-13

SpringBoot+Vue赋能商家打造Java商城新体验

标签 :Java商城
发表时间: 2023-12-20
推荐阅读

南钢鑫智链平台 | 供应链集采平台解决方案

发表时间:2024-01-06

java电商领域的技术专家Newway

发表时间:2023-04-13

“数”及大文旅,“链”推大湾区 | 朗尊携手广东电视台助推乡村振兴

发表时间:2023-10-16

小羊云商免费注册小程序商城:电商与无货源商家的新机遇

发表时间:2023-09-20

首届全国私域团长交易会,私域选品再出大动作!

发表时间:2023-12-29

咨询

电话

免费注册