我在我的应用程序中使用Devise gem进行Web身份验证。
现在我即将为我的应用程序编写一个移动应用程序,其中包括登录/注册过程。
用于登录用户并验证用户从移动应用程序发出的每个电话的正确方法是什么?
以下哪项策略是正确的? (我不确定采用哪种方法来保证更安全)
注意:您可以在http://i.stack.imgur.com/I13uT.png中查看上面的图片(会更清楚)
仅供参考:我正在使用Titanium开发移动应用程序,我的后端服务器运行Rails应用程序
答案 0 :(得分:3)
模型#1不安全,您没有在后续请求中传递任何类型的身份验证,以验证用户是否仍然是他们所说的人。
我认为你真正想知道的是,在登录后验证用户是谁的最佳方式是什么。我之前已经回答了这个问题Exposing Rails/Devise Authentication to iOS application和同样的答案适用于此。
在Devise中使用令牌身份验证将匹配模型#2,并且也是最安全的,因为您更换了令牌的用户名/密码,而不必存储其用户名和密码,并在每次请求时重复使用它。
答案 1 :(得分:2)
我不确定#1是如何安全的,因为后续请求都没有以任何方式签名。如果有人知道你的应用程序的文件结构,他们就可以这样访问它,对吗?
使用Devise,您可以在User
模型上设置属性,以允许用户通过令牌进行身份验证:
class User < ActiveRecord::Base
devise :token_authenticatable
# there are other details and options on this, but this is the relevant piece
end
在每个控制器上,您还可以通过在开头添加before_filter :authenticate_user!
来验证用户是否已通过身份验证:
class PostsController < ActionController::Base
before_filter :authenticate_user!
end
当从移动应用程序发出请求时,请在请求中包含auth_token,以便Rails应用程序可以在响应之前进行身份验证。
除了身份验证之外,您还可能对CanCan之类的内容感兴趣来处理授权。