Какой правильный заголовок использовать при использовании аутентификации на основе ключа API - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь создать API, который использует защиту на основе ключей API. Ключ генерируется при создании пользователя с помощью ловушки. Теперь я не уверен, какую схему авторизации использовать с ним. Доступные (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization) не кажутся правильными. В моем applications_controller:

# frozen_string_literal: true

class ApplicationController < ActionController::API
  include ActionController::HttpAuthentication::Token::ControllerMethods

  protected

  def authenticate
    authenticate_token || render_unauthorized
  end

  def authenticate_token
    authenticate_with_http_token do |token, options|
      @current_user = User.find_by_api_key(token)
    end
  end

  def render_unauthorized(realm = 'Application')
    self.headers['WWW-Authenticate'] = %(Token realm='#{realm}')
    render json: 'Bad credentials', status: :unauthorized
  end
end

Но я знаю, что это не правильно:

self.headers['WWW-Authenticate'] = %(Token realm='#{realm}')

Схема авторизации Token отсутствует. Что я должен использовать вместо этого? Я не нахожу много информации об этом.

Я также знаю, что Basi c не правильный тип, потому что это не user:password, закодированный в base64. Может быть X-Api-Key? Я хотел бы помочь в этом вопросе, если это возможно:].

1 Ответ

2 голосов
/ 18 февраля 2020

Вам нужен заголовок HTTP_AUTHORIZATION формы Token token="####################", хотя вам не нужно делать это самостоятельно. Используйте код, указанный в документации :

authorization = ActionController::HttpAuthentication::Token.encode_credentials(users(:dhh).token)
get "/notes/1.xml", headers: { 'HTTP_AUTHORIZATION' => authorization }
...