web-dev-qa-db-fra.com

OAuth 2.0 PHP Client et exemple de serveur)

J'ai téléchargé la version du serveur (PDO) disponible pour le OAuth 2.0 ici: http://code.google.com/p/oauth2-php/

Je ne sais pas si c'est la meilleure mise en œuvre honnêtement.

Il est configuré et renvoie actuellement une erreur JSON indiquant qu'il attend qu'un client lui transmette les arguments corrects.

Maintenant, il est livré avec un dossier "lib" qui contient un fichier Client .inc. Honnêtement, je ne sais pas comment l'utiliser car il n'y a pas PHP exemple que j'ai trouvé dans l'archive et je n'ai rien trouvé en ligne. J'ai trouvé un exemple pour Drupal en utilisant cette bibliothèque, mais c'est un gâchis étant donné qu'ils ont leurs propres fonctionnalités liées à Drupal en tant que module.

Je me demandais si quelqu'un ici avait eu de la chance en utilisant cette bibliothèque cliente PHP, et si oui, peut-il partager un exemple qui se connecte, autorise puis redirige vers l'URL de rappel avec la session pour pouvoir accéder aux appels de page/api protégés?

Je voulais essayer l'API Facebook Graph (opensource), mais je l'ai trouvée très personnalisée pour Facebook et je ne savais pas très bien où je devais placer l'URL du serveur OAuth 2.0 que j'ai installé moi-même) serveur.

25
johnshaddad

La configuration d'un fournisseur OAuth2 est assez facile une fois que vous savez comment fonctionne le protocole. Il s'agit d'un processus en 2 ou 3 étapes (selon votre configuration et si vous obtenez des jetons au nom d'un utilisateur ou simplement depuis le serveur).

Ce dont vous aurez besoin:

  • Code de travail pour un fournisseur OAuth2
  • La patience

Ce dont vous aurez besoin pour savoir comment faire avec votre code:

  • Créer un client (jetons d'accès publics et privés)
  • Découvrez comment les points de terminaison d'autorisation et de jeton sont nommés (généralement /authorize et /token)
  • Découvrez comment les portées sont traitées

La première étape pour obtenir un jeton consiste à appeler /authorize?response_type=code&client_id=[YOUR ID]&redirect_uri=[YOUR REDIRECT URI]&scope=[YOUR SCOPE] , où:

  • clientid ([YOUR ID]) est votre jeton d'accès public
  • redirect_uri ([VOTRE URI REDIRECT]) est votre URI de redirection. Vous y serez redirigé une fois que vous aurez terminé l'étape d'autorisation
  • la portée est la portée de votre futur jeton

À la fin (il y a généralement un bouton d'envoi), votre navigateur sera redirigé vers l'URI spécifié avec un code dans l'URL (code = blah). Enregistrez cette valeur.

Lorsque vous avez ce code, appelez l'autre point de terminaison: /token?client_id=[YOUR ID]&client_secret=[YOUR SECRET]&grant_type=authorization_code&scope=[YOUR SCOPE]&code=[YOUR CODE]&redirect_uri=[YOUR REDIRECT URI]

Les paramètres: - client_id - encore une fois, votre clé publique client - client_secret - votre clé privée ( c'est censé être un appel côté serveur) - portée - la portée du jeton - DOIT CORRESPONDRE LE PREMIER APPEL - redirect_uri - l'URI de redirection - DOIT CORRESPONDRE AU PREMIER APPEL - code - le code que vous avez reçu

Si tout s'est bien passé, vous verrez un objet JSON sur votre écran contenant les informations de jeton.

Que se passe-t-il en arrière-plan

Étape 1 (autoriser)

Lorsque vous confirmez le formulaire, le serveur crée un jeton temporaire (jeton d'authentification comme on les appelle), qui a généralement une durée de vie très courte (mon code sp oauth2 définit généralement cela à 60 secondes). C'est le temps que votre serveur doit passer de la réception du code à l'étape de déclenchement 2. C'est juste un système de confirmation, et son but est également de stocker les informations fournies à l'étape 1 pour éviter les détournements .

Étape 2 (jeton)

C'est là que votre jeton d'accès est réellement créé. Beaucoup de vérifications, beaucoup de choses, mais au final, le jeton n'est qu'une valeur qui relie votre client_id et votre jeton. C'est tout.

Plug sans vergogne: si vous utilisez le framework Laravel, j'ai construit exactement cela à partir de zéro (plutôt que d'utiliser l'exemple de code merdique et non documenté): http: // bundles .laravel.com/bundle/oauth2-sp

44

PHP a un client PECL: http://www.php.net/manual/en/book.oauth.php

Belle introduction sur oauth2: http://www.slideshare.net/aaronpk/an-introduction-to-oauth-2

Ce site oauth2.net/2/ liste 3 oauth serveur à différents stades de développement.

Les grands fournisseurs (Facebook, Google, Yahoo, Twitter, etc.) implémentent leur propre version d'Oauth, et de plus Oauth 2.0 est toujours en projet de révision, chaque fournisseur suit une révision différente

6
Alvin K.

Je travaille sur un type de ce client PHP qui fait ce qui suit:

  • Écoutez sur une prise
  • Authentification -> Demande
  • Processus d'authentification -> Règles côté serveur
  • Authentification -> Réponse comme résultat
  • Continuer la demande du côté client sur la réponse recueillie

La réponse courte est: curl + JSON

Tous les processus d'authentification demandés avec curl à mon script côté serveur qui prend les variables d'authentification, puis traitent et comparent et à la fin, la réponse écho 'JSON Encoded' contient plusieurs variables en écho renvoyées au client.

Après la réponse, les variables rassemblées 'JSON Decode' en tant que variables indépendantes et maintenant le script côté client savent quoi faire pour ce client.

Donnez ensuite à l'utilisateur actuellement authentifié (spécifié par Sessions) quelques outils. Tout le travail est exécuté dans PHP Desktop , un serveur Web intégré de mangouste avec PHP et le support curl. En fait, il n'est pas nécessaire d'utiliser une lib donc PHP possède sa propre bibliothèque complète. Utilisez curl, JSON et en PHP côté serveur, MySQL (vérification conditionnelle) est suffisant à des fins d'authentification.

4
user2557456

Je suis en partie troublé par votre question. Vous avez dit "qu'il est configuré et renvoie actuellement une erreur JSON indiquant qu'il attend qu'un client lui transmette les arguments corrects", et pourtant vous voulez un exemple de quelque chose qui "se connecte, autorise puis redirige vers l'URL de rappel "? Si vous avez tout opérationnel et attendez d'accepter les demandes, vous devriez pouvoir simplement utiliser une demande jQuery Ajax (en utilisant l'en-tête d'autorisation) pour faire une demande. Tant que vous avez le client_id et le client_secret connectés, il devrait renvoyer tout ce que votre API Web est configurée pour vider.

0
CrimsonKissaki