Rails API和本机移动应用程序身份验证

激动剂_

我知道有关此主题的信息很多,但是找不到最新的信息。我看到了与Rails和android身份验证相关的类似主题,但是TokenAuthenticatable现在我将其从devise中删除

我的问题很简单:使用Rails 4,有没有很好的方法可以从本地Android和iPhone应用程序对用户进行身份验证?有谁知道提供解决方案的优秀教程或文章?

亚当·韦特(Adam Waite)添加赏金:

我刚刚在这个问题上悬赏500英镑,因为我找不到在任何地方从iOS应用程序向Rails API进行身份验证的正确做法。这是我正在考虑做的事情,但不知道它是否安全?!:

假设我们有一个User记录。用户已经注册了一个帐户,该帐户已经User在数据库中创建了带有email列和password_digest列的记录。

用户登录后,我希望该用户在移动应用上保持身份验证,直到明确退出为止。

我想我们将需要基于令牌的身份验证。我可能会在创建时创建一个ApiKey记录,User并将其另存为User记录上的关联

当用户登录/登录时,响应将包含一个API令牌(类似SecureRandom.hex),该令牌将保存在iOS钥匙串中,并与所有后续请求一起使用,以通过在标头中传递用户并使用类似以下方式进行验证来验证用户:

before_filter :restrict_access

private

def restrict_access
authenticate_or_request_with_http_token do |token, options|
  ApiKey.exists?(access_token: token)
end

这样安全吗?我是否应该在每个请求中刷新令牌并将其包含在响应中?

我还有什么其他选择?Facebook,Twitter和Pinterest之类的公司做什么?

我知道OAuth2.0,但这不是用于授予外部应用程序吗?

是否有管理这一切的宝石?

抱歉,在这里完全不确定。

500个最佳答案。

灯箱

我的研究解决方案的要点。随时进行编辑,更正,无效等。

SessionsController < ApplicationController
  skip_before_filter :authenticate_user, :only => [:create]
  def create
    user = User.where("username = ? OR email = ?", params[:username_or_email], params[:username_or_email]).first
    if user && user.authenticate(params[:password])
      api_key = user.find_api_key
      if !api_key.secret_key || api_key.is_expired?
        api_key.set_expiry_date
        api_key.generate_secret_key
      end
      api_key.save
      render json: api_key, status: 201     
    else
      status: 401
    end
  end

注意ApiAuth.authentic吗?方法和请求对象。该请求必须在客户端上使用HMAC算法进行签名。

ApplicationController < ActionController::Base
  respond_to :json
  force_ssl
  protect_from_forgery with: :null_session 
  before_filter :authenticate_user
  private
  def authenticate_user
    if authenticate_user_from_secret_key
      return true
    else
      head :unauthorized 
    end
  end
  def authenticate_user_from_secret_key
    userid = ApiAuth.access_id(request)
    currentuser = userid && User.find_by_id(userid)
    if ApiAuth.authentic?(request, currentuser.find_api_key.secret_key)
      return true
    else
      return false
    end
    false
  end

用户创建/注册

UsersController < ApplicationController
  skip_before_filter :authenticate_user, :only => [:create]
  def create
      user = User.create(user_params)
      if !user.new_record?
        render json: user.find_apit_key, status: 201

      else
       # error
      end
  end

api密钥模型。与#352 railscast中的api密钥模型相似,唯一的区别是ApiAuth密钥生成。

class ApiKey < ActiveRecord::Base
  before_create :generate_secret_key, :set_expiry_date
  belongs_to :user   
  def generate_secret_key
    begin
    self.secret_key = ApiAuth.generate_secret_key
    end while self.class.exists?(secret_key: secret_key)
  end

用户模型。

class User < ActiveRecord::Base
  has_secure_password
  before_save :ensure_api_key 
  has_many :api_keys 
  def find_api_key
   self.api_keys.active.ios.first_or_create
  end

在客户端,必须使用HMAC算法对请求进行签名。

代码来自:[SHA1 HMAC密钥生成/身份验证] https://github.com/mgomes/api_auth [控制器和模型] https://github.com/danahartweg/authenticatable_rest_api

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Devise Session对Rails / Ember应用程序的Doorkeeper API进行身份验证

来自分类Dev

使用Devise进行Rails应用程序本地和远程身份验证(两种策略)

来自分类Dev

Rails对两个应用程序使用一个身份验证系统

来自分类Dev

使用Active Directory进行身份验证的外部Rails / Node应用程序/ SSO

来自分类Dev

针对Web应用程序和移动应用程序的REST API身份验证

来自分类Dev

Web 应用程序、Web API 和移动应用程序之间的身份验证

来自分类Dev

使用Capybara和Cucumber测试Rails Shopify应用程序(在测试中升级Shopify计划会导致身份验证错误)

来自分类Dev

他们的身份验证库是否类似于Devise,它仅支持API Rails应用程序,还支持刷新令牌?

来自分类Dev

移动应用程序Web API身份验证

来自分类Dev

移动应用程序Web API身份验证

来自分类Dev

Rails应用程序,IIS 8.5中具有Windows身份验证的REMOTE_USER属性

来自分类Dev

如何从k8s中部署的Rails应用程序对Google Cloud进行身份验证

来自分类Dev

如何为具有基本身份验证的 Rails 应用程序编写集成 minitest 代码?

来自分类Dev

Rails和DocRaptor,覆盖身份验证

来自分类Dev

Rails API中的用户身份验证

来自分类Dev

用户和应用程序的REST API身份验证

来自分类Dev

Rails 设计和 rails_admin 身份验证

来自分类Dev

Azure本机应用程序通用身份验证

来自分类Dev

嵌入式Flutter应用程序和本机Android中的Firebase身份验证

来自分类Dev

如何在本机应用程序(Android / iOS)中对用户进行身份验证和记住?

来自分类Dev

Rails设计应用程序以为移动应用程序创建REST API

来自分类Dev

具有第三方Oauth身份验证Web服务的Rails应用程序中的“自定义登录”表单

来自分类Dev

将Rails Web应用程序的用户会话与用于移动应用程序的Rails API的授权令牌结合使用。

来自分类Dev

Azure移动应用程序身份验证和Azure AAD B2C

来自分类Dev

基于Hyperledger Fabric的Web和移动应用程序中的身份验证机制

来自分类Dev

Azure移动应用程序身份验证和Azure AAD B2C

来自分类Dev

Azure移动应用程序和Xamarin表单:在后台使用Facebook进行身份验证

来自分类Dev

如何获取和使用适当的signingKey进行Azure移动应用程序身份验证?

来自分类Dev

如何为移动应用程序创建API(需要身份验证)

Related 相关文章

  1. 1

    使用Devise Session对Rails / Ember应用程序的Doorkeeper API进行身份验证

  2. 2

    使用Devise进行Rails应用程序本地和远程身份验证(两种策略)

  3. 3

    Rails对两个应用程序使用一个身份验证系统

  4. 4

    使用Active Directory进行身份验证的外部Rails / Node应用程序/ SSO

  5. 5

    针对Web应用程序和移动应用程序的REST API身份验证

  6. 6

    Web 应用程序、Web API 和移动应用程序之间的身份验证

  7. 7

    使用Capybara和Cucumber测试Rails Shopify应用程序(在测试中升级Shopify计划会导致身份验证错误)

  8. 8

    他们的身份验证库是否类似于Devise,它仅支持API Rails应用程序,还支持刷新令牌?

  9. 9

    移动应用程序Web API身份验证

  10. 10

    移动应用程序Web API身份验证

  11. 11

    Rails应用程序,IIS 8.5中具有Windows身份验证的REMOTE_USER属性

  12. 12

    如何从k8s中部署的Rails应用程序对Google Cloud进行身份验证

  13. 13

    如何为具有基本身份验证的 Rails 应用程序编写集成 minitest 代码?

  14. 14

    Rails和DocRaptor,覆盖身份验证

  15. 15

    Rails API中的用户身份验证

  16. 16

    用户和应用程序的REST API身份验证

  17. 17

    Rails 设计和 rails_admin 身份验证

  18. 18

    Azure本机应用程序通用身份验证

  19. 19

    嵌入式Flutter应用程序和本机Android中的Firebase身份验证

  20. 20

    如何在本机应用程序(Android / iOS)中对用户进行身份验证和记住?

  21. 21

    Rails设计应用程序以为移动应用程序创建REST API

  22. 22

    具有第三方Oauth身份验证Web服务的Rails应用程序中的“自定义登录”表单

  23. 23

    将Rails Web应用程序的用户会话与用于移动应用程序的Rails API的授权令牌结合使用。

  24. 24

    Azure移动应用程序身份验证和Azure AAD B2C

  25. 25

    基于Hyperledger Fabric的Web和移动应用程序中的身份验证机制

  26. 26

    Azure移动应用程序身份验证和Azure AAD B2C

  27. 27

    Azure移动应用程序和Xamarin表单:在后台使用Facebook进行身份验证

  28. 28

    如何获取和使用适当的signingKey进行Azure移动应用程序身份验证?

  29. 29

    如何为移动应用程序创建API(需要身份验证)

热门标签

归档