← strona głównaProgramowanie (Програмування)

Podstawowe metody uwierzytelniania w API

Podstawowe metody uwierzytelniania w API na Ruby on Rails: Basic Auth, Token, JWT i OAuth 2 dla bezpiecznego dostępu do zasobów.

Spis treściKliknij link, aby przejść do wybranego miejsca
Ta treść została automatycznie przetłumaczona z ukraińskiego.
Kiedy tworzymy API w Ruby on Rails, ważne jest, aby kontrolować, kto ma dostęp do zasobów. Oto podstawowe podejścia do uwierzytelniania:

Podstawowe uwierzytelnianie

Najprostsza, ale mało bezpieczna metoda. W podstawowym uwierzytelnianiu nagłówek Authorization przesyła nazwę użytkownika i hasło, zakodowane w Base64.
Format nagłówka:
Authorization: Basic <base64_string>
<base64_string> = Zakodowany w Base64 ciąg username:password
Na przykład, jeśli masz:
  • username = apiuser
  • password = secret123
Najpierw formujemy ciąg:
apiuser:secret123
Następnie kodujemy go w Base64:
require 'base64'

credentials = "apiuser:secret123"
encoded = Base64.strict_encode64(credentials)
puts encoded
# => YXBpdXNlcjpzZWNyZXQxMjM=
Zatem nagłówek będzie wyglądał tak:
Authorization: Basic YXBpdXNlcjpzZWNyZXQxMjM=
Kiedy Rails widzi Authorization: Basic ..., metoda authenticate_or_request_with_http_basic dekoduje Base64, dzieli username:password i sprawdza je na serwerze.

Uwierzytelnianie za pomocą tokena

Użytkownik otrzymuje unikalny token, który dodaje do każdego żądania.
Bezpieczniejsza opcja dla aplikacji mobilnych lub frontendowych.
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
Nagłówek żądania:
Authorization: Token abc123

JWT (JSON Web Token)

Popularny sposób dla stateless API. Serwer nie przechowuje sesji, a klient wysyła podpisany token.
Przykład z gemem jwt:
# Tworzenie tokena
payload = { user_id: user.id, exp: 24.hours.from_now.to_i }
token = JWT.encode(payload, Rails.application.secret_key_base)

# Weryfikacja tokena
decoded = JWT.decode(token, Rails.application.secret_key_base).first
user_id = decoded["user_id"]
Nagłówek:
Authorization: Bearer <jwt_token>

OAuth 2.0

Standard do autoryzacji i dostępu do zasobów przez zewnętrzne usługi lub API.
Aby stworzyć własny serwer OAuth 2 w Rails, używa się Doorkeeper:
# Gemfile
gem 'doorkeeper'
Po skonfigurowaniu można wydawać tokeny dostępu zewnętrznym klientom:
Authorization: Bearer <access_token>
Jeśli chcesz pozwolić użytkownikom logować się przez zewnętrzne usługi (Google, Facebook, GitHub), używa się OmniAuth w połączeniu z Devise do uwierzytelniania.
Prosto mówiąc: Doorkeeper — do dostępu do API, OmniAuth — do logowania użytkowników przez inne usługi.

🔥 Więcej postów

Wszystkie wpisy
Czym jest złożoność faktorialna?
Programowanie (Програмування)16 wrz '25 19:03

Czym jest złożoność faktorialna?

Złożoność faktorialna to szybki wzrost liczby wariantów, gdy dla n elementów możliwych permutacji...

Czym jest NP-trudność?
Programowanie (Програмування)16 wrz '25 19:31

Czym jest NP-trudność?

NP-trudność – to klasa zadań, w której znalezienie rozwiązania jest niezwykle trudne, ale sprawdz...

Czym jest ivar w Ruby / Rails?
Programowanie (Програмування)19 paź '25 20:12

Czym jest ivar w Ruby / Rails?

ivar w Ruby to zmienna instancji (instance variable), która jest oznaczana @. W Rails przekazuje ...

Czym różni się OAuth 1 od OAuth 2
Programowanie (Програмування)19 paź '25 20:34

Czym różni się OAuth 1 od OAuth 2

Post opisuje OAuth 1 i OAuth 2: ich historię, przeznaczenie, różnice, cechy bezpieczeństwa oraz z...

Czym jest ORM i po co jest potrzebny?
Programowanie (Програмування)26 paź '25 14:00

Czym jest ORM i po co jest potrzebny?

ORM - to technologia, która pozwala na pracę z bazami danych za pomocą obiektów kodu, upraszczają...