CN109635528A - 一种微信小程序用户登陆方法、设备及存储设备 - Google Patents
一种微信小程序用户登陆方法、设备及存储设备 Download PDFInfo
- Publication number
- CN109635528A CN109635528A CN201811291070.1A CN201811291070A CN109635528A CN 109635528 A CN109635528 A CN 109635528A CN 201811291070 A CN201811291070 A CN 201811291070A CN 109635528 A CN109635528 A CN 109635528A
- Authority
- CN
- China
- Prior art keywords
- user
- small routine
- server
- log
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/30—Authentication, i.e. establishing the identity or authorisation of security principals
- G06F21/31—User authentication
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明提供了一种微信小程序用户登陆方法,其方法包括利用wx.login函数生成用户登陆凭证,根据用户登陆凭证从微信服务器端获取用户唯一性标识和用户操作有效性标识,最后利用用户登陆凭证、用户唯一性标识和用户操作有效性标识获取己方服务器登陆凭证,从而登陆微信小程序。一种微信小程序用户登陆设备及存储设备,用于实现一种微信小程序用户登陆方法。本发明的有益效果是:本发明的技术方案提供了一种完善可靠且易于使用的微信小程序用户登陆方法,用户可以通过此中间件快速安全的登陆微信小程序,快速建立小程序内的用户体系,方便快捷,实用性强。
Description
技术领域
本发明涉及微信小程序技术领域,尤其涉及一种微信小程序用户登陆方法、设备及存储设备。
背景技术
为了方便小程序应用使用微信登陆态进行授权登陆,微信小程序提供了登陆授权的开放接口。小程序的文档比较复杂,涉及服务器端请求,加密信息解密,管理和维护用户标识,session_key过期处理等等技术细节,实现起来较为繁琐。依托于koa,eggjs等的中间件机制,可以实现微信小程序登陆授权中间件,方便接入使用,快速实现小程序登陆授权功能。
发明内容
为了解决上述问题,本发明提供了一种微信小程序用户登陆方法、设备及存储设备,一种微信小程序用户登陆方法,主要包括以下步骤:
S101:用户进入小程序登陆界面,启动小程序登陆流程;
S102:小程序端发送第一请求指令至己方服务器以请求登陆己方服务器,所述第一请求指令中包含用户登陆标识,己方服务器提取接收到的请求指令中的用户登陆标识,检查己方服务器内存中是否存在与用户登陆标识相对应的己方服务器登陆凭证skey;若是,则到步骤S103;若否,则到步骤S104;所述用户登陆标识根据用户登陆微信时的微信账号获得;
S103:己方服务器利用checkSession函数检查所述己方服务器登陆凭证skey是否过期;若是,则到步骤S104;若否,则到步骤S108;
S104:己方服务器发送第二请求指令至小程序端;
S105:小程序端根据第二请求指令,利用wx.login函数,请求微信服务器生成用户登陆凭证code并返回至对应的小程序端,小程序端利用wx.request函数将code和小程序的相关参数发送给己方服务器;
S106:己方服务器利用code和小程序的相关参数,通过微信服务器提供的第三方接口,向微信服务器发出请求,从而从微信服务器中获取用户操作有效性标识session_key和用户唯一性标识openid;
S107:己方服务器根据获取的openid和session_key,生成登陆小程序所需的己方服务器登陆凭证skey;
S108:根据己方服务器登陆凭证skey,登陆小程序。
进一步地,在步骤S106中,用户操作有效性标识session_key和微信服务器派发的用户登陆凭证code一一对应,同一code只能获取一次session_key,每次使用wx.login函数,都会获取一个新的code和对应的session_key。
进一步地,在步骤S106中,用户操作有效性标识session_key有时效性,session_key的过期时间跟用户使用小程序的频率成正相关。
一种存储设备,所述存储设备存储指令及数据用于实现一种微信小程序用户登陆方法。
一种微信小程序用户登陆设备,包括:处理器及所述存储设备:所述处理器加载并执行所述存储设备中的指令及数据用于实现一种微信小程序用户登陆方法。
本发明提供的技术方案带来的有益效果是:本发明的技术方案提供了一种完善可靠且易于使用的微信小程序用户登陆方法,用户可以通过此中间件快速安全的登陆微信小程序,快速建立小程序内的用户体系,方便快捷,实用性强。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1是本发明实施例中一种微信小程序用户登陆方法的流程图;
图2是本发明实施例中基于redis的具体实施方案的示意图;
图3是本发明实施例中硬件设备工作的示意图。
具体实施方式
为了对本发明的技术特征、目的和效果有更加清楚的理解,现对照附图详细说明本发明的具体实施方式。
本发明的实施例提供了一种微信小程序用户登陆方法、设备及存储设备。
请参考图1,图1是本发明实施例中一种微信小程序用户登陆方法的流程图,具体包括如下步骤:
S101:用户进入小程序登陆界面,启动小程序登陆流程;
S102:小程序端发送第一请求指令至己方服务器以请求登陆己方服务器,所述第一请求指令中包含用户登陆标识,己方服务器提取接收到的请求指令中的用户登陆标识,检查己方服务器内存中是否存在与用户登陆标识相对应的己方服务器登陆凭证skey;若是,则到步骤S103;若否,则到步骤S104;所述用户登陆标识根据用户登陆微信时的微信账号获得;
S103:己方服务器利用checkSession函数检查所述己方服务器登陆凭证skey是否过期;若是,则到步骤S104;若否,则到步骤S108;
S104:己方服务器发送第二请求指令至小程序端;
S105:小程序端根据第二请求指令,利用wx.login函数,请求微信服务器生成用户登陆凭证code并返回至对应的小程序端,小程序端利用wx.request函数将code和小程序的相关参数发送给己方服务器;
S106:己方服务器利用code和小程序的相关参数,通过微信服务器提供的第三方接口,向微信服务器发出请求,从而从微信服务器中获取用户操作有效性标识session_key和用户唯一性标识openid;所述第三方接口为微信服务器和己方服务器之间的接口;
S107:己方服务器根据获取的openid和session_key,生成登陆小程序所需的己方服务器登陆凭证skey;
S108:根据己方服务器登陆凭证skey,登陆小程序。
在步骤S106中,用户操作有效性标识session_key和微信服务器派发的用户登陆凭证code一一对应,同一code只能获取一次session_key,每次使用wx.login函数,都会获取一个新的code和对应的session_key。
在步骤S106中,用户操作有效性标识session_key有时效性,session_key的过期时间跟用户使用小程序的频率成正相关,且session_key的时效性与skey的时效性一致,当session_key失效时,skey也会失效。
请参考图2,图2是本发明实施例中基于redis的具体实施方案的示意图,所以下面介绍的细节全部基于redis;总结为以下四个步骤:
步骤一:调用wx.login生成code
wx.login()这个API的作用就是为当前用户生成一个临时的登陆凭证,这个临时登陆凭证的有效期只有五分钟。拿到这个登陆凭证后就可以进行下一步操作:获取openid和session_key。具体代码如下:
步骤二:获取openid和session_key
在公众平台里,openid用来标识每个用户在订阅号、服务号、小程序这三种不同应用的唯一标识,也就是说每个用户在每个应用的openid都是不一致的,所以在小程序里,用openid来标识用户的唯一性。
有了用户标识,就需要让该用户进行登陆,那么session_key就保证了当前用户进行会话操作的有效性,这个session_key是微信服务器端派发的。可以用这个标识来间接地维护小程序用户的登陆太,那么这个session_key是怎么拿到的呢?
需要在己方服务器端请求微信提供的第三方接口https://api.weixin.qq.com/ sns/jscode2session,这个接口需要带上四个参数字段,如下表所示:
参数 | 值 |
appid | 小程序的appid |
secret | 小程序的secret |
js_code | 前面调用wx.login派发的code |
grant_type | 'authorization_code' |
从上表中这几个参数,可以看出,要请求这个接口必须先调用wx.login()来获取到用户当前会话的code。那么为什么要在服务端来请求这个接口呢?其实是出于安全性的考量,如果在前端通过request调用此接口,就不可避免的需要将小程序的appid和小程序的secret暴露在外部,同时也将微信服务端下发的session_key暴露给“有心之人”,这就给业务安全带来极大的风险。除了需要在服务端进行session_key的获取,还需要注意两点:
1、session_key和微信派发的code是一一对应的,同一code只能换取一次session_key。每次调用wx.login(),都会下发一个新的code和对应的session_key,为了保证用户体验和登陆态的有效性,开发者需要清楚用户需要重新登陆时才去调用wx.login();
2、session_key是有时效性的,即便是不调用wx.login,session_key也会过期,过期时间跟用户使用小程序的频率成正相关,但具体的时间长短开发者和用户都是获取不到的。
具体代码如下:
步骤三:生成3rd_session
前面说过通过session_key来“间接”地维护登陆态,所谓间接,也就是需要自己维护用户的登陆态信息,这里也是考虑到安全性因素,如果直接使用微信服务端派发的session_key来作为业务方的登陆态使用,会被“有心之人”用来获取用户的敏感信息,比如wx.getUserInfo()这个接口,就需要session_key来配合解密微信用户的敏感信息。
那么如何生成己方服务器的登陆态标识呢,这里可以使用sha1(session_key+openid)生成标识,将生成后的登陆态标识(这里我们统称为'skey')返回给前端,并在前端维护这份登陆态标识(一般是存入storage)。而服务端以skey为key,{skey,session_key,openid}为value,存储于redis中,前端发送请求时,需在请求Header中携带'X-WX-Flag','X-WX-Skey'字段,服务端根据请起头中的Flag和Skey从redis中取出对应的用户信息。
下面代码是获取session_key,生成skey,redis存储的简易流程:
const code=getRequiredHeader(ctx,consts.WX_HEADER_CODE);
const{session_key,openid}=await wxlogin(ctx,appId,appSecret,code);
const skey=sha1(session_key+openid);
let session={skey,session_key,openid};
await store.set(skey,session,maxAge);
ctx.$wxInfo=session;
ctx.body={code:0,data:{skey}};
步骤四:checkSession
将skey存入前端的storage里,每次进行用户数据请求时会带上skey,那么如果此时skey过期呢?所以需要调用到wx.checkSession()这个API来校验当前skey是否已经过期,这个API并不需要传入任何有关skey的信息参数,而是微信小程序自己去调自己的服务来查询用户最近一次生成的skey是否过期。如果当前skey过期,就让用户来重新登陆,更新skey,并将最新的skey存入用户数据表中。
checkSession这个步骤一般是放在小程序启动时就校验登陆态的逻辑处。
下面代码即校验登陆态的简单流程:
请参考图3,图3是本发明实施例的硬件设备工作示意图,所述硬件设备具体包括:一种微信小程序用户登陆设备301、处理器302及存储设备303。
一种微信小程序用户登陆设备301:所述一种微信小程序用户登陆设备301实现所述一种微信小程序用户登陆方法。
处理器302:所述处理器302加载并执行所述存储设备303中的指令及数据用于实现所述一种微信小程序用户登陆方法。
存储设备303:所述存储设备303存储指令及数据;所述存储设备303用于实现所述一种微信小程序用户登陆方法。
本发明的有益效果是:本发明的技术方案提供了一种完善可靠且易于使用的微信小程序用户登陆方法,用户可以通过此中间件快速安全的登陆微信小程序,快速建立小程序内的用户体系,方便快捷,实用性强。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (5)
1.一种微信小程序用户登陆方法,其特征在于:包括以下步骤:
S101:用户进入小程序登陆界面,启动小程序登陆流程;
S102:小程序端发送第一请求指令至己方服务器以请求登陆己方服务器,所述第一请求指令中包含用户登陆标识,己方服务器提取接收到的请求指令中的用户登陆标识,检查己方服务器内存中是否存在与用户登陆标识相对应的己方服务器登陆凭证skey;若是,则到步骤S103;若否,则到步骤S104;所述用户登陆标识根据用户登陆微信时的微信账号获得;
S103:己方服务器利用checkSession函数检查所述己方服务器登陆凭证skey是否过期;若是,则到步骤S104;若否,则到步骤S108;
S104:己方服务器发送第二请求指令至小程序端;
S105:小程序端根据第二请求指令,利用wx.login函数,请求微信服务器生成用户登陆凭证code并返回至对应的小程序端,小程序端利用wx.request函数将code和小程序的相关参数发送给己方服务器;
S106:己方服务器利用code和小程序的相关参数,通过微信服务器提供的第三方接口,向微信服务器发出请求,从而从微信服务器中获取用户操作有效性标识session_key和用户唯一性标识openid;
S107:己方服务器根据获取的openid和session_key,生成登陆小程序所需的己方服务器登陆凭证skey;
S108:根据己方服务器登陆凭证skey,登陆小程序。
2.如权利要求1所述的一种微信小程序用户登陆方法,其特征在于:在步骤S106中,用户操作有效性标识session_key和微信服务器派发的用户登陆凭证code一一对应,同一code只能获取一次session_key,每次使用wx.login函数,都会获取一个新的code和对应的session_key。
3.如权利要求1所述的一种微信小程序用户登陆方法,其特征在于:在步骤S106中,用户操作有效性标识session_key有时效性,session_key的过期时间跟用户使用小程序的频率成正相关。
4.一种存储设备,其特征在于:所述存储设备存储指令及数据用于实现权利要求1~3所述的任意一种微信小程序用户登陆方法。
5.一种微信小程序用户登陆设备,其特征在于:包括:处理器及所述的存储设备;所述处理器加载并执行所述存储设备中的指令及数据用于实现权利要求1~3所述的任意一种微信小程序用户登陆方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811291070.1A CN109635528A (zh) | 2018-10-31 | 2018-10-31 | 一种微信小程序用户登陆方法、设备及存储设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811291070.1A CN109635528A (zh) | 2018-10-31 | 2018-10-31 | 一种微信小程序用户登陆方法、设备及存储设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109635528A true CN109635528A (zh) | 2019-04-16 |
Family
ID=66066931
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811291070.1A Withdrawn CN109635528A (zh) | 2018-10-31 | 2018-10-31 | 一种微信小程序用户登陆方法、设备及存储设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109635528A (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110321696A (zh) * | 2019-07-01 | 2019-10-11 | 阿里巴巴集团控股有限公司 | 基于小程序的账户安全保护方法及系统 |
CN110362986A (zh) * | 2019-07-17 | 2019-10-22 | 福州福昕网络技术有限责任公司 | 一种微信小程序自动登录方法及存储设备 |
CN111245825A (zh) * | 2020-01-09 | 2020-06-05 | 百度在线网络技术(北京)有限公司 | 小程序登录方法、服务器和电子设备 |
CN111523862A (zh) * | 2020-04-27 | 2020-08-11 | 广东电网有限责任公司培训与评价中心 | 一种获取人才数据的方法和相关设备 |
US10846383B2 (en) | 2019-07-01 | 2020-11-24 | Advanced New Technologies Co., Ltd. | Applet-based account security protection method and system |
CN112039826A (zh) * | 2019-06-03 | 2020-12-04 | 北京京东尚科信息技术有限公司 | 一种应用于小程序端的登录方法和装置 |
CN112069488A (zh) * | 2020-07-27 | 2020-12-11 | 合肥美的智能科技有限公司 | 在通信程序中的应用登录方法及其相关装置 |
CN112087367A (zh) * | 2020-08-05 | 2020-12-15 | 广州思创科技股份有限公司 | 一种数据处理流程方法、系统、装置和存储介质 |
CN113065115A (zh) * | 2021-03-18 | 2021-07-02 | 中睿信数字技术有限公司 | 基于oauth2.0实现小程序登录安全和无网络隔离下认证鉴权方法 |
CN113094693A (zh) * | 2021-04-15 | 2021-07-09 | 北京秒针人工智能科技有限公司 | 用于小程序授权登录方法、系统、电子设备及存储介质 |
-
2018
- 2018-10-31 CN CN201811291070.1A patent/CN109635528A/zh not_active Withdrawn
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112039826A (zh) * | 2019-06-03 | 2020-12-04 | 北京京东尚科信息技术有限公司 | 一种应用于小程序端的登录方法和装置 |
CN110321696A (zh) * | 2019-07-01 | 2019-10-11 | 阿里巴巴集团控股有限公司 | 基于小程序的账户安全保护方法及系统 |
CN110321696B (zh) * | 2019-07-01 | 2020-08-25 | 阿里巴巴集团控股有限公司 | 基于小程序的账户安全保护方法及系统 |
US10846383B2 (en) | 2019-07-01 | 2020-11-24 | Advanced New Technologies Co., Ltd. | Applet-based account security protection method and system |
CN110362986A (zh) * | 2019-07-17 | 2019-10-22 | 福州福昕网络技术有限责任公司 | 一种微信小程序自动登录方法及存储设备 |
CN111245825B (zh) * | 2020-01-09 | 2022-05-10 | 百度在线网络技术(北京)有限公司 | 小程序登录方法、服务器和电子设备 |
CN111245825A (zh) * | 2020-01-09 | 2020-06-05 | 百度在线网络技术(北京)有限公司 | 小程序登录方法、服务器和电子设备 |
CN111523862A (zh) * | 2020-04-27 | 2020-08-11 | 广东电网有限责任公司培训与评价中心 | 一种获取人才数据的方法和相关设备 |
CN111523862B (zh) * | 2020-04-27 | 2024-02-23 | 广东电网有限责任公司培训与评价中心 | 一种获取人才数据的方法和相关设备 |
CN112069488A (zh) * | 2020-07-27 | 2020-12-11 | 合肥美的智能科技有限公司 | 在通信程序中的应用登录方法及其相关装置 |
CN112087367A (zh) * | 2020-08-05 | 2020-12-15 | 广州思创科技股份有限公司 | 一种数据处理流程方法、系统、装置和存储介质 |
CN113065115A (zh) * | 2021-03-18 | 2021-07-02 | 中睿信数字技术有限公司 | 基于oauth2.0实现小程序登录安全和无网络隔离下认证鉴权方法 |
CN113094693A (zh) * | 2021-04-15 | 2021-07-09 | 北京秒针人工智能科技有限公司 | 用于小程序授权登录方法、系统、电子设备及存储介质 |
CN113094693B (zh) * | 2021-04-15 | 2024-06-07 | 北京秒针人工智能科技有限公司 | 用于小程序授权登录方法、系统、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109635528A (zh) | 一种微信小程序用户登陆方法、设备及存储设备 | |
CN108810029B (zh) | 一种微服务架构服务间鉴权系统及优化方法 | |
US11095455B2 (en) | Recursive token binding for cascaded service calls | |
US20210056196A1 (en) | Systems and mechanism to control the lifetime of an access token dynamically based on access token use | |
US10116448B2 (en) | Transaction authorization method and system | |
US9166966B2 (en) | Apparatus and method for handling transaction tokens | |
CN105187372B (zh) | 一种基于移动应用入口的数据处理方法、装置和系统 | |
CN104618116B (zh) | 一种协同数字签名系统及其方法 | |
CN111314340B (zh) | 认证方法及认证平台 | |
CN113923020B (zh) | SaaS多租户架构的微服务鉴权方法、装置、及设备 | |
US20130055362A1 (en) | Authenticating via mobile device | |
CN110099048B (zh) | 一种云存储方法及设备 | |
CA2940344A1 (en) | Techniques to operate a service with machine generated authentication tokens | |
CN110225050B (zh) | Jwt令牌的管理方法 | |
WO2002017555A2 (en) | Countering credentials copying | |
CN108701094A (zh) | 在基于云的应用中安全地存储和分发敏感数据 | |
CN109412812A (zh) | 数据安全处理系统、方法、装置和存储介质 | |
CN107634973B (zh) | 一种服务接口安全调用方法 | |
KR20220160549A (ko) | 클러스터 접속 방법, 장치, 전자 설비 및 매체 | |
CN110430167B (zh) | 临时账户的管理方法、电子设备、管理终端及存储介质 | |
US9444800B1 (en) | Virtual communication endpoint services | |
US20190394032A1 (en) | Systems and methods for using an oauth client secret to encrypt data sent to browser | |
CN104657860A (zh) | 一种手机银行安全认证方法 | |
US11317288B2 (en) | Systems and methods for securing communication between a native application and an embedded hybrid component on an electronic device | |
EP3062254A1 (en) | License management for device management system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WW01 | Invention patent application withdrawn after publication | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20190416 |