App 只支持微信和手机号登录,前后端通过 REST API 通信,如何设计相对安全可靠的鉴权流程?

2015-01-09 13:57:00 +08:00
 zjmdp
目前设想的是为每一个用户生成一个uid,并绑定微信的openid和手机号,用户可使用微信oauth登录,或者使用手机号验证码的形式登录,后台记录uid, openid, mobile_number的对应关系。整个流程没有密码的概念。

基于以上的假设,如何设计一套安全的鉴权流程?求各位大神指点
5383 次点击
所在节点    程序员
8 条回复
zjmdp
2015-01-09 14:29:34 +08:00
如果基于token的授权体系,微信oauth登录后可以拿openid去换token,那手机总不能拿手机号把?不管拿openid和手机号换token,都不太安全。
abelyao
2015-01-09 14:37:00 +08:00
在 APP 中加入 “使用微信登录” 就好咯。
至于手机号码,只有手机号码去登录肯定是不行的,如果我的朋友也在使用这个 APP 我知道他的手机号码,岂不是可以互相登录?除非是手机号码+短信验证码来登录,这样太蛋疼了
beordle
2015-01-09 14:52:24 +08:00
@abelyao 不一定的,我們通過設備號和一些隨機參數可以設定一個虛擬的密碼,當然只有短信是最終的用戶驗證手段,為了避免每次都要短信驗證,我們可以:
把默認密碼保存,我們每次就驗證是否一致就好咯(當然你要基於 token)
只要每次短信驗證 相當於重置這些密碼就好
zjmdp
2015-01-09 15:11:34 +08:00
@abelyao
@beordle
是否可以这样呢?
手机验证的话可以在验证成功后直接返回token,这个token一直有效,直到用户登出或者重新登录
微信登录的话终端拿到微信的access token后传给后台,app的后台去微信的后台验证access token是否有效,如果有效再返回token
beordle
2015-01-09 15:29:42 +08:00
恩,不過token 一定要加上設備的id然後付個md5防止篡改
zjmdp
2015-01-09 15:36:58 +08:00
@beordle 不是很明白?token由服务器生成,如果被篡改了请求就是无效的呀
clino
2015-01-09 15:40:58 +08:00
@zjmdp 看起来手机只有短信验证码才行吧
zjmdp
2015-01-09 15:43:25 +08:00
@clino 嗯,想着就是将验证码作为token下发的凭证

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/160620

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX