back

Knowledge Centre

Verständnis von Simple OAuth in Drupal: Authentifizierung für entkoppelte Anwendungen

| 08.11.2018

Verständnis von Simple OAuth in Drupal: Authentifizierung für entkoppelte Anwendungen

Was ist Simple OAuth?


Simple OAuth ist ein Drupal-Modul, das Authentifizierungsfunktionen für entkoppelte Anwendungen bietet. Es implementiert eine tokenbasierte Authentifizierung, die es Benutzern ermöglicht, sicher auf Ihre Anwendung zuzugreifen, indem sie Zugriffstoken anstelle von traditionellen Anmeldeinformationen verwenden.

Ablauf der Token-basierten Authentifizierung

Der Authentifizierungsprozess folgt einem hierarchischen Tokensystem:

  • Zugriffstoken: Die primäre Authentifizierungsberechtigung, generiert als eindeutiger SHA-256-Hash
  • Aktualisierungstoken: Wird verwendet, um neue Zugriffstoken zu generieren, wenn sie ablaufen
  • Grundlegende Authentifizierung: Erforderlich, wenn sowohl Zugriffs- als auch Aktualisierungstoken ablaufen

Verständnis von Zugriffstoken

Zugriffstoken sind JWT (JSON Web Tokens), die zwei Schlüsselkomponenten enthalten:

Ansprüche
Ansprüche speichern wesentliche Benutzeridentitätsinformationen, die von der Client-Anwendung benötigt werden. Standardmäßig enthält Simple OAuth zwei Ansprüche:

  • `mail`: E-Mail-Adresse des Benutzers
  • `username`: Kontoname des Benutzers

Bereiche
Bereiche repräsentieren Benutzerrollen innerhalb Ihrer Anwendung. Sie bestimmen, welche Aktionen ein Benutzer ausführen kann. Einige wichtige Punkte zu Bereichen:

  • Mehrere Rollen sollten mit Leerzeichen getrennt angegeben werden
  • Wenn kein Bereich definiert ist, wird die Rolle 'authentifiziert' zum Standard
  • Das endgültige Token enthält sowohl angeforderte Bereiche als auch zusätzliche Rollen, die in der Client-ID definiert sind

Erweiterung der Ansprüche von Zugriffstoken

Um benutzerdefinierte Ansprüche über die Standardansprüche `mail` und `username` hinaus hinzuzufügen, müssen Sie die Klasse `AccessTokenEntity` erweitern. So geht's:

class MyAccessTokenEntity extends AccessTokenEntity {
   public function convertToJWT(CryptKey $privateKey) {
       $private_claims = [];
       \Drupal::moduleHandler()
           ->alter('simple_oauth_private_claims', $private_claims, $this);
       if (!is_array($private_claims)) {
           $message = 'Eine Implementierung von hook_simple_oauth_private_claims_alter '
               . 'gibt einen ungültigen $private_claims-Wert zurück. $private_claims '
               . 'muss ein Array sein.';
           throw new \InvalidArgumentException($message);
       }
       $builder = (new Builder())
           ->setAudience($this->getClient()->getIdentifier())
           ->setId($this->getIdentifier(), TRUE)
           ->setIssuedAt(time())
           ->setNotBefore(time())
           ->setExpiration($this->getExpiryDateTime()->getTimestamp())
           ->setSubject($this->getUserIdentifier())
           ->set('scopes', $this->getScopes());
       // Fügen Sie hier benutzerdefinierte Ansprüche hinzu
       // Beispiel: $builder->set('user_picture', ...);
       foreach ($private_claims as $claim_name => $value) {
           $builder->set($claim_name, $value);
       }
       $key = new Key($privateKey->getKeyPath(), $privateKey->getPassPhrase());
       $token = $builder->sign(new Sha256(), $key)->getToken();
       return $token;
   }
}

Implementierung der benutzerdefinierten Token-Entität

Um Ihre benutzerdefinierte Token-Entität zu verwenden, müssen Sie sie im Service-Container von Drupal registrieren:

class MyServiceProvider extends ServiceProviderBase implements ServiceProviderInterface {
   public function alter(ContainerBuilder $container) {
       $definition = $container->getDefinition('simple_oauth.repositories.access_token');
       $definition->setClass('Drupal\my_module\Repositories\MyAccessTokenRepository');
   }
}

Best Practices

  1. Überprüfen Sie immer private Ansprüche, bevor Sie sie verarbeiten
  2. Betrachten Sie die Ablaufzeiten der Token sorgfältig für Ihren Anwendungsfall
  3. Implementieren Sie eine ordnungsgemäße Fehlerbehandlung für die Generierung und Validierung von Token
  4. Dokumentieren Sie alle benutzerdefinierten Ansprüche, die zum System hinzugefügt wurden
  5. Überwachen Sie die Token-Nutzung und implementieren Sie bei Bedarf eine Ratenbegrenzung

Kontaktieren Sie uns, wenn Sie Hilfe benötigen.

As an AI, I'm unable to process or translate images or files. I can only translate text. Please provide the text you'd like translated.
  • Wissen
    Wissenszentrum
    Im Gehirn einer KI
  • Wissen
    Wissenszentrum
    Feinabstimmung von LLaMA zur Nachbildung von Eminescus literarischem Stil
  • Wissen
    Wissenszentrum
    Ein neues Zeitalter beginnt: Drupal CMS 1.0 startet