[symfony] Oauth2 : comment passé l’étape de partage des informations (FOSOAuthServerBundle)

Lorsque l’on utilise Oauth2, l’utilisateur qui souhaite se connecter via votre ‘provider’ dois approuvé le partage de ces informations personnels avant d’être définitivement connecter.  Cependant, dans certain cas, on ne souhaite pas qu’il effectue cette confirmation. Par exemple :

  • L’utilisateur à déjà valider ce partage d’information et vous souhaiter concerver cette confirmation
  • Vous êtes propriétaire du site ‘client’ qui utilise votre authentification et des données de l’utilisateur

 

Je me retrouve personnellement dans le deuxième cas. Et demander une confirmation de partage des données aux utilisateurs risquerait de leur faire peur.

Nous allons utiliser les événements de FOS (Friend Of Symfony) Oauth pour court-circuiter la connexion (pas d’inquiétude, ce genre  de cour-circuit ne provoque pas d’incendie. OK, je sort =>).

Les créateurs du bundle ont en effet gérer deux événements liée a cette autorisation :

  • fos_oauth_server.pre_authorization_process : permet d’agir avant l’affichage de la demande autorisation
  • fos_oauth_server.post_authorization_process: permet d’agir après l’acceptation ou le revu de l’autorisation.

 

Créons donc une classe qui va par exemple, autorisé automatiquement l’utilisateur en fonction du client qui demande l’autorisation (dans mon cas, je suis développeur du site principale qui utilise l service d’authentification) :


<?php 
namespace AppBundle\Event; 

use FOS\OAuthServerBundle\Event\OAuthEvent; 

class OAuthEventListener { 

public function onPreAuthorizationProcess(OAuthEvent $event) {
     // pour le site Assure Web, on ne demande pas de partager les données 
     if ( $event->getClient()->getPublicId() == "Mon_id_client") {
         $event->setAuthorizedClient(true);
      }

   }

}

Ici, l’identifiant est mis en dur dans le code, mais il faut évidement mettre cette identifiant dans les paramètres pour pouvoir le modifier facilement :).

 

Maintenant que c’est fait, on va dire a Symfony d’utiliser cette méthode lorsque l’événement ‘fos_oauth_server.pre_authorization_process’ est déclencher. Pour ça il faut déclarer notre service à Symfopny dans le service.yml. 

services:
    oauth_event_listener:
        class:  AppBundle\Event\OAuthEventListener
        tags:
            - { name: kernel.event_listener, event: fos_oauth_server.pre_authorization_process, method: onPreAuthorizationProcess}

Et voila, si l’utilisateur du site cible, il n’aura pas l’étape d’acceptation de partage d’information !

Sur le githunb du bundle, on peut également voir un exemple qui mémorise le choix de l’utilisateur : https://github.com/FriendsOfSymfony/FOSOAuthServerBundle/blob/master/Resources/doc/the_oauth_event_class.md

Ajouter un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *