Java Web(Spring MVC) 用户验证问题

2014-01-20 03:15:18 +08:00
 ruoran
最近我在学用 Spring MVC 写 RESTful API. 现在到了加用户的时候。

以下问题可能组织的不是很好,好多概念还很模糊 :)

1. 我现在这个练习的web service 简单来说就是有User,每个User 可以 CRUD 属于自己的 Task。
API想做成下面这样 (不知道spring security 有没有提供现成的功能)

POST /user/authenticate form_data: { username, password }
return: access_token
第一步获取这个token,这个会expire,如果expired 后续的call会返回“请重新authenticate”的status code。
后续的API call 都会加上这个 access_token

GET /user/{user_id}/tasks form_data:{ access_token }
return: a list of tasks

POST /user/{user_id}/tasks form_data: { access_token, content: “the content”}
return: success create task

POST /register form_data: { access_token, username: “”, password: “” }
return: success create user

以上的验证方式算是OAuth的简单用法么,以上方法正确可行么?

2. 宏观来说,一般对于web的app,好像都用form login,然后用cookie+session记录这个login的状态。但是对于一个REST Service,如何实现用户的认证?
我看了一下,
(a). 简单的可以用http basic, http digest但是这个必须要https。
(b). 复杂的是OAuth。 这个涉及到给第三方client权限,对于我的这个练习,web_client / mobile_client 是我自己写的,应该不需要认证。
(c). 好像也可以沿用cookie,在android上把cookie存在某个地方,模拟浏览器的那些对cookie的动作,这个感觉不那么好。

一般在企业里用的是什么样的用户认证方式?比如说QQ之类有不同客户端的应用(desktop,web,mobile)
9695 次点击
所在节点    Java
2 条回复
yyfearth
2014-01-20 04:11:39 +08:00
虽然我没有企业里面的经验,但是我看到的一般是推荐用 OAuth
如果是简单的 https + basic auth 也可以,对于信任的客户端也是可以接受的

或者自己做一套 token 的生成和验证算法 (其实和cookie session差不多)只不过把 token/session_id 放到 authenticate header 里面,我记得 amazon 的auth就是用的这样的方式。MVC 可以用 filter 或者 配置 Spring Security 来做验证。

我之前还用过用 basic auth,但是里面的 username 和 password 实际上是 user id 和 hashed token,这样密码在客户端也有个比较基本的保护
sharpnk
2014-01-21 08:44:32 +08:00
oAuth 1/2的話,Spring有現成的Library: https://github.com/spring-projects/spring-security-oauth

具體情況取決於你的workflow,但基本的流程都是用username和password來換一個access token。然後你在每個API call的Header裏都加上這個token就可以。這樣API就可以是stateless的了,你不用擔心session的問題。但在客戶端你可能還是需要保存token以便後續使用。如果是web app的話那你基本上只有cookie一個選擇。iOS可以放在keychain裏面。

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

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

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

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

© 2021 V2EX