Rails + OAuth Github - Уведомление об устаревании аутентификации через параметры запроса URL. Как мне переместить параметры в заголовок?

Это мой первый раз, когда я использую github oauth в Rails, поэтому я следил за устаревшим учебником YouTube (2015 г.). Все было ясно, и мое приложение работает, однако, когда я успешно зарегистрировался, я получил следующее письмо:

Привет, @NAME!

30 июля 2020 года в 19:31 (UTC) ваше приложение использовало токен доступа (с User-Agent Faraday v0.17.0) как часть параметра запроса для доступа к конечной точке через GitHub API:

https://api.github.com/user

Пожалуйста, используйте HTTP-заголовок авторизации вместоaccess_token параметр запроса устарел.

В зависимости от того, как вы используете API, мы будем отправлять вам это электронное напоминание ежемесячно.

Посетите https://developer.github.com/changes/2020-02-10-deprecating-auth-through-query-param для получения дополнительной информации о предлагаемых обходных путях и датах удаления.

Спасибо, команда GitHub

И действительно, моя секретная информация видна в моем URL: https://github.com/login?client_id=123456789&return_to=%2Flogin%2Foauth%2Fauthorize%3Fclient_id%123456789%26redirect_uri%3Dhttp%253A%252F%252Flocalhost%253A4000%252Fauth%252Fgithub%252Fcallback%26response_type%3Dcode%26state%123456789

Мне нужно переместить эти вещи в заголовок, но я не знаю, как это сделать. Мой код:

Конфигурация приложения

module AppName
  class Application < Rails::Application
    # Initialize configuration defaults for originally generated Rails version.
    config.load_defaults 6.0

    # Settings in config/environments/* take precedence over those specified here.
    # Application configuration can go into files in config/initializers
    # -- all .rb files in that directory are automatically loaded after loading
    # the framework and any gems in your application.
    config.middleware.use OmniAuth::Builder do
      provider :developer if Rails.env.development?
      provider :github, ENV['CLIENTID'], ENV['CLIENTSECRET']
    end
  end
end

Контроллер сеанса

class SessionController < ApplicationController
  skip_before_action :verify_authenticity_token, only: [:create]

  def create
    user = User.find_or_create_by(
      provider: auth_hash[:provider],
      uid: auth_hash[:uid]
    ) do |user|
      user.name = auth_hash[:info][:name]
    end

    session[:user_id] = user.id

    redirect_to :about
  end

  def destroy
    reset_session

    redirect_to :root
  end

  private

  def auth_hash
    request.env['omniauth.auth']
  end
end

Маршруты:

get 'auth/github', as: 'github_auth'

Gemfile:

# Login
gem 'omniauth'
gem 'omniauth-github', github: 'omniauth/omniauth-github', branch: 'master'

Дополнительная информация с github: https://developer.github.com/changes/2020-02-10-deprecating-auth-through-query-param/

1 ответ

В этом письме сообщается, что вы делаете подобные запросы https://api.github.com/user?access_token=<your_token_value>и это устарело. Вы должны поставитьaccess_token ценность внутри Authorization заголовок и значение должны иметь префикс token например token <your_token_value>. Эта библиотека используетoauth2 драгоценный камень, и я думаю, вам следует настроить options.mode и, вероятно, options.header_format, потому что он установлен наBearer %s по умолчанию.

provider :github, ENV['GITHUB_KEY'], ENV['GITHUB_SECRET'],
    {
      :auth_token_params => {
        :mode => :header,
        :header_format => 'token %s',
      }
    }
Другие вопросы по тегам