我在我的应用程序中使用 Devise gem 进行 Web 身份验证。
现在我要为我的应用程序编写一个移动应用程序,其中包括登录/注册过程。
我应该使用什么正确方法来登录用户并验证用户从移动应用程序发出的每个呼叫?
以下哪个策略是正确的?(我不确定采用哪种方法更安全)
注:上图可以在http://i.stack.imgur.com/I13uT.png查看(会更清晰)
仅供参考:我正在使用 Titanium 开发移动应用程序,我的后端服务器运行 Rails 应用程序
我在我的应用程序中使用 Devise gem 进行 Web 身份验证。
现在我要为我的应用程序编写一个移动应用程序,其中包括登录/注册过程。
我应该使用什么正确方法来登录用户并验证用户从移动应用程序发出的每个呼叫?
以下哪个策略是正确的?(我不确定采用哪种方法更安全)
注:上图可以在http://i.stack.imgur.com/I13uT.png查看(会更清晰)
仅供参考:我正在使用 Titanium 开发移动应用程序,我的后端服务器运行 Rails 应用程序
模型 #1 不安全,您没有在后续请求中通过任何类型的身份验证来验证用户仍然是他们所说的那个人。
我假设您真正想知道的是,登录后验证用户身份的最佳方法是什么适用于此。
在 Devise 中使用令牌身份验证将匹配模型 #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之类的东西来处理授权感兴趣。