IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

FOSOAuthServerbundle créer un access_token [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 97
    Par défaut FOSOAuthServerbundle créer un access_token
    Bonjour,

    Je suis actuellement en train de développer des web services que je protège avec OAuth2 (FOSOAuthServerbundle). Ces WS seront destinés à une application iOS et une application Android.

    Dans ces web services j'autorise l'inscription d'un utilisateur (/api/v1/registrations) qui va envoyer un mail d'inscription avec un lien de confirmation. J'aimerais que l'application Android reconnaisse le lien de validation et propose à l'utilisateur d'ouvrir l'application plutôt qu'un navigateur. J'ai donc aussi créé l'url /api/v1/registration/confirm/{token} pour confirmer l'inscription.

    Suite à cette confirmation j'aimerais logger automatiquement l'utilisateur, autrement dit lui donner un access token (en fait exactement comme s'il faisait appel à l'url d'authentification). Malheureusement, je n'ai rien trouvé à ce sujet :/

    Est-ce que quelqu'un a déjà été confronté à cela et est-ce que c'est déjà possible ? ^^

  2. #2
    Membre chevronné
    Avatar de phpiste
    Homme Profil pro
    Développeur Senior
    Inscrit en
    Septembre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 251
    Billets dans le blog
    7
    Par défaut
    Salut!

    j'étais exatement en pleine galère avec ce souci et je te file la solution que j'ai trouvé:

    comme je t'ai dis dans un autre poste il faut se plonger dans le code de la Oauth2 pour savoir comment ça marche l'algorithme de c eprotocole et comment il est implémenté en PHP, brief:

    j'ai créer une petit methode dans mon controller qui permet de récupérer le token

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
       protected function getAuth2Token($user, $request)
        {
            $clientManager = $this->get('fos_oauth_server.client_manager.default');
            $client = $clientManager->createClient();
            $client->setRedirectUris(['http://clinet.local/']);
            $client->setAllowedGrantTypes(['password']);
            $clientManager->updateClient($client);
            $request2 = new Request();
            $request2->query->add([
                'client_id' => $client->getPublicId(),
                'client_secret' => $client->getSecret(),
                'grant_type' => 'password',
                'username' => $user->getUsername(),
                'password' => $request->get('password')
            ]);
     
            try {
                return $this->get('fos_oauth_server.server')->grantAccessToken($request2);
            } catch (OAuth2ServerException $e) {
                return $e->getHttpResponse();
            }
        }
    ce code en gros simule un nouveau Objet Request et essai de récuprer le token

    Ahmed

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 97
    Par défaut
    Je vais tester ça, merci beaucoup

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 97
    Par défaut
    Salut phpiste et merci pour ton aide, j'ai peut-être répondu un peu trop rapidement ^^"

    Dans ta fonction tu crées un nouveau client sans utiliser le client actuellement connecté, est-ce normal ?

    De plus, comme je l'ai dit dans mon premier poste, je suis actuellement dans le contexte d'une confirmation d'une inscription (avec un token de confirmation), j'ai donc bien un user mais je n'ai pas son mot de passe comme toi quand tu fais "$request->get('password')". J'imagine que dans ton process d'inscription des web services tu actives automatiquement le compte de l'utilisateur sans envoyer le mail de confirmation ?

    En fait ce qui serait top c'est de pouvoir récupérer le json avec l'access_token en donnant un objet user :/

  5. #5
    Membre chevronné
    Avatar de phpiste
    Homme Profil pro
    Développeur Senior
    Inscrit en
    Septembre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 251
    Billets dans le blog
    7
    Par défaut LAZY AUTHENTICATION
    Citation Envoyé par nayro57 Voir le message
    Salut phpiste et merci pour ton aide, j'ai peut-être répondu un peu trop rapidement ^^"

    Dans ta fonction tu crées un nouveau client sans utiliser le client actuellement connecté, est-ce normal ?

    De plus, comme je l'ai dit dans mon premier poste, je suis actuellement dans le contexte d'une confirmation d'une inscription (avec un token de confirmation), j'ai donc bien un user mais je n'ai pas son mot de passe comme toi quand tu fais "$request->get('password')". J'imagine que dans ton process d'inscription des web services tu actives automatiquement le compte de l'utilisateur sans envoyer le mail de confirmation ?

    En fait ce qui serait top c'est de pouvoir récupérer le json avec l'access_token en donnant un objet user :/

    enfaite je comprend pas quand exactement ton utilisateur doit récupérer le token ?

    si dans ton étape de confirmation de compte c'est à dire cette route: /api/v1/registration/confirm/{token}

    le client n'est pas encore creé non ?

    donc c'est normale que je créer un nouveau à la volé

    sinon dans mon cas je récupère le token dans l'étape login donc j'envoi un mot de passe et j'utilise le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $client->setAllowedGrantTypes(['password']);
    dans ton cas peut être et j'en suis pas sure faut modifier le grant type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $client->setAllowedGrantTypes(array('token', 'authorization_code'));

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 97
    Par défaut
    En fait on n'a pas la même notion de client : d'après ce que j'ai pu voir sur différents sites, il y a deux manières de gérer les clients. Soit on fait un client par utilisateur comme toi tu as fait j'imagine, soit on fait un client par application (par exemple un client pour l'appli Android et un pour l'appli iOS). Après quelques petites recherches, semblerait que les deux fonctionnent très bien mais que la deuxième méthode soit la plus répandue, j'étais donc parti là dessus au moment de me lancer il y a quelques temps.

    Un exemple sera peut-être plus clair :

    L'application mobile se connecte en tant que client (avec le grant_type nommé client_credentials), un access_token est fourni lui permettant d'accéder à des fonctions qui ne nécessitent pas d'avoir un utilisateur connecté, comme par exemple l'inscription, mais qui est quand même protégé par OAuth. Ainsi dans cet exemple il va :
    - faire appel à l'url d'authentification pour récupérer l'access_token en tant que client (grant_type=client_credentials)
    - faire appel à l'url d'inscription en tant que client
    (à ce moment un mail de confirmation est envoyé à l'utilisateur qui s'est inscrit)
    - l'utilisateur clique sur le lien du mail qui lui ouvrira normalement l'application mobile pour faire appel à l'url de confirmation avec le token de confirmation (je ne parle pas ici de l'url de confirmation de FOSUser mais d'une url de confirmation de mes web services qui reprend la logique de la fonction de FOSUser), et c'est à ce moment là que j'aimerais récupérer le json contenant l'access_token en lui donnant l'objet user que j'ai à ma disposition ici :/ (Une deuxième fonction des web services et non plus la première qui permettait l'inscription, et donc je n'ai plus le password en clair à ce moment là)

    Est-ce plus clair pour toi ? ^^ Désolé j'ai un peu de mal à expliquer :s

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CR] Est il possible de créer des univers avec Seagate Info?
    Par Frank dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 27/06/2002, 15h22
  2. Créer un interpréteur de langage inspiré du Basic
    Par Picasso dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 11/05/2002, 17h10
  3. Comment faire pour créer un bitmap
    Par GliGli dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/04/2002, 15h41
  4. Peux t'on créer une copie locale de l'objet partagé?
    Par Anonymous dans le forum CORBA
    Réponses: 8
    Dernier message: 16/04/2002, 16h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo