back

Knowlegde

Knowledge Centre

Înțelegerea Simple OAuth în Drupal: autentificare pentru aplicații decuplate

by editor | 25.02.2025

Înțelegerea Simple OAuth în Drupal: autentificare pentru aplicații decuplate

Ce este Simple OAuth?

Simple OAuth este un modul Drupal care oferă capacități de autentificare pentru aplicații decuplate. Implementează autentificarea bazată pe token-uri, permițând utilizatorilor să acceseze în siguranță aplicația prin intermediul token-urilor de acces, mai degrabă decât prin credențiale tradiționale de autentificare.

Fluxul de autentificare bazat pe token-uri

Procesul de autentificare urmează un sistem ierarhic de token-uri:

  • Token de acces: Credențialul principal de autentificare, generat ca un hash SHA-256 unic
  • Token de reîmprospătare: Utilizat pentru a genera noi token-uri de acces când acestea expiră
  • Autentificare de bază: Necesară când atât token-urile de acces, cât și cele de reîmprospătare expiră

Înțelegerea token-urilor de acces

Token-urile de acces sunt JWT (JSON Web Tokens) care conțin două componente cheie:

Claims Claims-urile stochează informații esențiale despre identitatea utilizatorului necesare aplicației client. În mod implicit, Simple OAuth include două claims:

  • mail: Adresa de email a utilizatorului
  • username: Numele de cont al utilizatorului

Scopes Scope-urile reprezintă rolurile utilizatorului în cadrul aplicației. Acestea determină ce acțiuni poate efectua un utilizator. Câteva aspecte importante despre scope-uri:

  • Rolurile multiple trebuie specificate cu spațiu între ele
  • Dacă nu este definit niciun scope, rolul 'authenticated' devine implicit
  • Token-ul final include atât scope-urile solicitate, cât și orice roluri suplimentare definite în ID-ul clientului

Extinderea claims-urilor token-urilor de acces

Pentru a adăuga claims-uri personalizate dincolo de cele implicite mail și username, trebuie să extinzi clasa AccessTokenEntity. Iată cum:

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 = 'An implementation of hook_simple_oauth_private_claims_alter '
               . 'returns an invalid $private_claims value. $private_claims '
               . 'must be an array.';
           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());
       // Add custom claims here
       // Example: $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;
   }
}

Implementarea entității personalizate de token

Pentru a utiliza entitatea personalizată de token, va trebui să o înregistrezi în containerul de servicii al Drupal:

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');
   }
}

Bune practici

  1. Întotdeauna validați claims-urile private înainte de procesare
  2. Luați în considerare cu atenție timpii de expirare a token-urilor pentru cazul dvs. de utilizare
  3. Implementați gestionarea corespunzătoare a erorilor pentru generarea și validarea token-urilor
  4. Documentați orice claims-uri personalizate adăugate în sistem
  5. Monitorizați utilizarea token-urilor și implementați limitarea ratei dacă este necesar

Contactați-ne dacă aveți nevoie de ajutor.

article_bg_3.png
Top
  • Knowlegde
    Knowledge Centre
    Extinde validarea câmpurilor cu expresii regulate
    editor
  • Knowlegde
    Knowledge Centre
    Înțelegerea arhitecturii CMS decuplate complet vs. decuplate progresiv
    editor
  • Knowlegde
    Knowledge Centre
    AngularJS sau Angular: Înțelegerea diferențelor și luarea deciziei corecte
    editor