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

Обкладинка допису: Основні способи аутентифікації в API
ЗмістНатисність на посилання, щоб перейти до потрібного місця
Коли ми створюємо 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 — для логіну користувачів через інші сервіси.

Цей допис поки що не має жодних доповнень від автора/ки.

Що таке експоненційне зростання?
16 вер., 18:57

Що таке експоненційне зростання?

meme code
meme code@memecode
Що таке факторіальна складність?
16 вер., 19:03

Що таке факторіальна складність?

meme code
meme code@memecode
Що таке NP-складність?
16 вер., 19:31

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

meme code
meme code@memecode
Offset vs Cursor Pagination у Rails: що вибрати та чому
24 вер., 15:22

Offset vs Cursor Pagination у Rails: що вибрати та чому

meme code
meme code@memecode
Що таке Row Security в PostgreSQL і навіщо це Rails-розробникам
04 жовт., 19:06

Що таке Row Security в PostgreSQL і навіщо це Rails-розробникам

meme code
meme code@memecode
Що таке ivar у Ruby / Rails?
19 жовт., 20:12

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

meme code
meme code@memecode
Чим відрізняються OAuth 1 від OAuth 2
19 жовт., 20:34

Чим відрізняються OAuth 1 від OAuth 2

meme code
meme code@memecode