求大神告知 OAuth2 refresh token 的理解以及 phonegap 用户登录的流程

2015-03-22 15:44:33 +08:00
 myc0210

我要做phonegap的应用。。。但是用户登录这块我始终搞不清。首先用户输入用户名和密码。然后去后端验证。。后端发回一个access token。然后本地存储这个access token。然后用户就可以一直登入进应用里。。。这是最简单的一个验证流程。但是如果access token被人拿走了。。。那么他就等于拥有你的用户账号。。。所以一般来说access token都是有过期时间的。。。生命周期短。。。但是没有办法一直让用户重复输入用户名和密码。。。这样refresh token的东西就出来了。这是一个生命周期长的token他的作用是一旦access token过期可以用它来重新获取access token。。但是这里就出现了一个问题。。。google的验证是用refresh token重新获取access token的时候 client id 和 client secret也是需要提供的。。。可是对于phonegap的应用来讲。。。如果这些都本地保存。。。那么他们都有可能和access token一样被人盗走。。。既然是这样= =那是不是对于phonegap的应用来说。。。这些步骤都没有任何意义?。。。我有点头晕。。请大家指点一下。。。谢谢 顺带。。。我的应用也不是提供api服务的= =我真的有必要用oauth2的东西吗。。。感觉我好想走错了方向。。。事实上我只是要phonegap 验证用户罢了。。。求好方法。。。

6497 次点击
所在节点    程序员
5 条回复
belin520
2015-03-22 16:40:19 +08:00
这排版,句号不是这么用的
puncsky
2015-03-22 16:57:34 +08:00
OAuth2 没有看上去那么简单,我不是特别的懂,但是可以说两句。

本质上来讲,**传统的 Login with Username/Password and create a stateful session with Cookies 的机制并不完美,它并没有考虑到 Client 可能是不可完全信任的**:

1. 无法安全地处理好 Clients 的授权粒度(Authorization with granularity for clients)的问题。
2. Clients 会知道用户的 username/password

而**OAuth 2.0 解决了对 Client 的信任问题**

1. User/Client/Authority 不同层级上的不同组合,达到更有粒度地控制对资源的访问
2. username/password 与 client 的分离: App 本身并不需要 username/password。用户能够取消某一 App 的权限而不影响其他 App , 用户改变 password 不会影响到App。

OAuth2 还有其他很tricky的地方比如如何防 CSRF。

在这里,我觉得 client id , client secret,access token,等等一系列被盗了也没关系,因为你仍旧需要 用户输入 username/password,而且他们是有时效性的,bear token expired 后需要新的授权,仍旧需要重新输入。
myc0210
2015-03-22 17:27:34 +08:00
@belin520 不好意思 那不是句号。。。我习惯打什么都加这个。。。
myc0210
2015-03-22 17:32:11 +08:00
@puncsky 噢!谢谢。。从你的回复我发现我好想搞错了什么= =因为我本身不需要提供服务。只是单纯自己的一个App,所以我压根也不需要Oauth2,是吗?如果用户的access token(不会expire的版本)丢了。。。那我也不需要管因为那是用户自己被黑了= =我可以这样理解我APP的需求嘛。最多我可以帮用户reset一个access token如果他被黑了。这样足够了?
jasonworg
2015-03-23 00:48:00 +08:00
去看看这篇文章,应该对你有着帮助。
http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

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

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

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

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

© 2021 V2EX