Cała oryginalna treść jest tworzona po ukraińsku. Nie wszystkie treści zostały jeszcze przetłumaczone. Niektóre posty mogą być dostępne tylko po ukraińsku.Dowiedz się więcej

Podstawowe metody uwierzytelniania w API

Okładka posta: Podstawowe metody uwierzytelniania w API
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.

Ten post nie ma jeszcze żadnych dodatków od autora.

Czym jest wzrost eksponencjalny?
16 wrz 18:57

Czym jest wzrost eksponencjalny?

meme code
meme code@memecode
Czym jest złożoność faktorialna?
16 wrz 19:03

Czym jest złożoność faktorialna?

meme code
meme code@memecode
Czym jest NP-trudność?
16 wrz 19:31

Czym jest NP-trudność?

meme code
meme code@memecode
Offset vs Cursor Pagination w Rails: co wybrać i dlaczego
24 wrz 15:22

Offset vs Cursor Pagination w Rails: co wybrać i dlaczego

meme code
meme code@memecode
Czym jest Row Security w PostgreSQL i po co jest to deweloperom Rails?
4 paź 19:06

Czym jest Row Security w PostgreSQL i po co jest to deweloperom Rails?

meme code
meme code@memecode
Czym jest ivar w Ruby / Rails?
19 paź 20:12

Czym jest ivar w Ruby / Rails?

meme code
meme code@memecode
Czym różni się OAuth 1 od OAuth 2
19 paź 20:34

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

meme code
meme code@memecode
Czym jest ORM i po co jest potrzebny?
26 paź 14:00

Czym jest ORM i po co jest potrzebny?

meme code
meme code@memecode
MCP: nowy internet, gdzie strony komunikują się z AI
4 lis 11:43

MCP: nowy internet, gdzie strony komunikują się z AI

meme code
meme code@memecode
Dlaczego TOON jest lepszy od JSON przy pracy z AI?
14 lis 15:14

Dlaczego TOON jest lepszy od JSON przy pracy z AI?

meme code
meme code@memecode