← головнаПрограмування

Основні способи аутентифікації в API

Основні способи аутентифікації в API на Ruby on Rails: Basic Auth, Token, JWT та OAuth 2 для безпечного доступу до ресурсів.

ЗмістНатисність на посилання, щоб перейти до потрібного місця
Коли ми створюємо API у Ruby on Rails, важливо контролювати, хто має доступ до ресурсів. Ось основні підходи до аутентифікації:

Basic Authentication

Найпростіший, але малобезпечний метод. У Basic Authentication заголовок Authorization передає ім’я користувача та пароль, закодовані у Base64.
Формат заголовка:
Authorization: Basic <base64_string>
<base64_string> = Base64-кодований рядок username:password
Наприклад, якщо у вас:
  • username = apiuser
  • password = secret123
Спочатку формуємо рядок:
apiuser:secret123
Далі кодуємо його у Base64:
require 'base64'

credentials = "apiuser:secret123"
encoded = Base64.strict_encode64(credentials)
puts encoded
# => YXBpdXNlcjpzZWNyZXQxMjM=
Отже, заголовок виглядатиме так:
Authorization: Basic YXBpdXNlcjpzZWNyZXQxMjM=
Коли Rails бачить Authorization: Basic ..., метод authenticate_or_request_with_http_basic декодує Base64, розділяє username:password і перевіряє їх на сервері.

Token Authentication

Користувач отримує унікальний токен, який додає до кожного запиту.
Більш безпечний варіант для мобільних або фронтенд-додатків.
class Api::V1::BaseController < ApplicationController
  before_action :authenticate_user!

  private

  def authenticate_user!
    token = request.headers['Authorization']&.split(' ')&.last
    @current_user = User.find_by(api_token: token)
    render json: { error: 'Unauthorized' }, status: :unauthorized unless @current_user
  end
end
Заголовок запиту:
Authorization: Token abc123

JWT (JSON Web Token)

Популярний спосіб для stateless API. Сервер не зберігає сесії, а клієнт надсилає підписаний токен.
Приклад з гемом jwt:
# Створення токена
payload = { user_id: user.id, exp: 24.hours.from_now.to_i }
token = JWT.encode(payload, Rails.application.secret_key_base)

# Перевірка токена
decoded = JWT.decode(token, Rails.application.secret_key_base).first
user_id = decoded["user_id"]
Заголовок:
Authorization: Bearer <jwt_token>

OAuth 2.0

Стандарт для авторизації та доступу до ресурсів через сторонні сервіси або API.
Для створення власного OAuth 2 сервера в Rails використовують Doorkeeper:
# Gemfile
gem 'doorkeeper'
Після налаштування можна видавати токени доступу зовнішнім клієнтам:
Authorization: Bearer <access_token>
Якщо потрібно дозволити користувачам входити через сторонні сервіси (Google, Facebook, GitHub), використовують OmniAuth у зв’язці з Devise для аутентифікації.
Простими словами: Doorkeeper — для доступу до API, OmniAuth — для логіну користувачів через інші сервіси.

🔥 Більше дописів

Всі публікації
Що таке NP-складність?
Програмування16 вер. '25, 19:31

Що таке NP-складність?

NP-складність – це клас задач, де знайти рішення надзвичайно важко, але перевірити готову відпові...

Що таке ivar у Ruby / Rails?
Програмування19 жовт. '25, 20:12

Що таке ivar у Ruby / Rails?

ivar у Ruby — це змінна екземпляра (instance variable), яка позначається @. У Rails вона передає ...