InhaltsverzeichnisKlicke auf den Link, um zur gewünschten Stelle zu navigieren
Dieser Inhalt wurde automatisch aus dem Ukrainischen übersetzt.
Wenn wir eine API in Ruby on Rails erstellen, ist es wichtig zu kontrollieren, wer Zugriff hat auf die Ressourcen. Hier sind die grundlegenden Ansätze zur Authentifizierung:
Basis-Authentifizierung
Die einfachste, aber wenig sichere Methode. Bei der Basis-Authentifizierung überträgt der Authorization-Header Benutzernamen und Passwort, die in Base64 kodiert sind.
Format des Headers:
Authorization: Basic <base64_string>
<base64_string> = Base64-kodierter String username:password
Zum Beispiel, wenn Sie haben:
- username = apiuser
- password = secret123
Zuerst bilden wir den String:
apiuser:secret123
Dann kodieren wir ihn in Base64:
require 'base64' credentials = "apiuser:secret123" encoded = Base64.strict_encode64(credentials) puts encoded # => YXBpdXNlcjpzZWNyZXQxMjM=
Also wird der Header so aussehen:
Authorization: Basic YXBpdXNlcjpzZWNyZXQxMjM=
Wenn Rails Authorization: Basic ... sieht, dekodiert die Methode authenticate_or_request_with_http_basic Base64, trennt username:password und überprüft sie auf dem Server.
Token-Authentifizierung
Der Benutzer erhält ein einzigartiges Token, das er zu jeder Anfrage hinzufügt. Eine sicherere Option für mobile oder Frontend-Anwendungen.
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
Header der Anfrage:
Authorization: Token abc123
JWT (JSON Web Token)
Eine beliebte Methode für stateless APIs. Der Server speichert keine Sitzungen, der Client sendet ein signiertes Token.
Beispiel mit dem Gem jwt:
# Token erstellen
payload = { user_id: user.id, exp: 24.hours.from_now.to_i }
token = JWT.encode(payload, Rails.application.secret_key_base)
# Token überprüfen
decoded = JWT.decode(token, Rails.application.secret_key_base).first
user_id = decoded["user_id"]
Header:
Authorization: Bearer <jwt_token>
OAuth 2.0
Ein Standard für die Autorisierung und den Zugriff auf Ressourcen über Drittanbieter-Services oder APIs.
Um einen eigenen OAuth 2-Server in Rails zu erstellen, verwendet man Doorkeeper:
# Gemfile gem 'doorkeeper'
Nach der Einrichtung können Zugriffstokens an externe Clients ausgegeben werden:
Authorization: Bearer <access_token>
Wenn es erforderlich ist, Benutzern das Einloggen über Drittanbieter-Services (Google, Facebook, GitHub) zu ermöglichen, verwendet man OmniAuth in Verbindung mit Devise zur Authentifizierung.
Einfach ausgedrückt: Doorkeeper — für den Zugriff auf die API, OmniAuth — für das Einloggen von Benutzern über andere Dienste.
Dieser Beitrag hat noch keine Ergänzungen vom Autor.