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.