Dans cet Article nous allons continuer notre voyage avec l’api de développement à l’aide de Oauth2 comme Protocole d’Autorisation. Notre Précédente Api de développement les articles sont répertoriés ci-dessous: Savon VS Repos Api Rest Comprendre OAuth2: L’autorisation OAuth 2.0 cadre permet à une application tierce pour obtenir un accès limité à un service HTTP, nom d’un propriétaire de la ressource. voici quelques liens que j’ai trouvé utile: knpuniversity screencast Oauth.net rfc6749 proposition de Norme de OAuth2 OAuth2 avec Symfony: Symfony fournit FOSOAuthServerBundle, qui peut être utilisé pour le serveur-côté de la mise en œuvre de OAuth2. instructions peut être trouvé here. Autoriser et un jeton itinéraires « @FOSOAuthServerBundle/Resources/config/routing/authorize.xml » & « @FOSOAuthServerBundle/Resources/config/routing/token.xml » défini dans le routage.yml sera utilisé pour la génération jeton d’Accès. OAuth Serveur dispose de 3 points de terminaison. Chaque point de terminaison effectue une fonction distincte dans le processus d’authentification OAuth. Autoriser l’Extrémité – L’utilisateur est redirigé ici par le client pour autoriser la demande. Jeton de point de Terminaison – Le client fait une demande à cet effet afin d’obtenir un Jeton d’Accès. C’est même comme gage de l’URL définie dans le routage.yml. Ressource de point de Terminaison(s) – Le client fournit un Jeton d’Accès valide pour une demande de ressource(s) à cet effet, comme /utilisateurs.json. les types de Subventions fournies dans OAuth2: OAuth2 fournit différents types de Subventions. Ces Types de Subventions permettra de vous exposer de multiples façons pour un client pour générer un Jeton d’Accès. 1. Le Code d’Autorisation: Le Code d’Autorisation type de subvention est utilisé lorsque le client souhaite faire une demande d’accès à des ressources protégées au nom d’un autre utilisateur (c’est à dire une 3ème partie). en savoir plus sur le code d’autorisation Exemple de Demande Les Codes d’autorisation sont récupérées à l’aide d’Autoriser le Contrôleur. Le client doit envoyer à l’utilisateur pour l’authentification OAuth du serveur d’Autoriser l’URL. Etape 1: tout d’Abord, l’utilisateur est redirigé vers l’Autoriser URL: /authorize?response_type=code&client_id=ClientId&redirect_uri=https://redirecturi.com/processToken 1 /authorize?response_type=code&client_id=ClientId&redirect_uri=https://redirecturi.com/processToken Succès d’une demande de transmettre automatiquement le client, le code d’autorisation dans l’URL (fourni redirect_uri URL) comme https://redirecturi.com/processToken?code=SplxlOBeZQQYbYS6WxSbIA&state=xyz 1 https://redirecturi.com/processToken?code=SplxlOBeZQQYbYS6WxSbIA&state=xyz Etape 2: après cela, un jeton peut être demandée en utilisant le code d’autorisation de jeton d’url, $ curl-u ClientId:ClientSecret https://api.mysite.com/token -d 'grant_type=authorization_code&code=xyz' 1 $ curl-u ClientId:ClientSecret https://api.mysite.com/token -d 'grant_type=authorization_code&code=xyz' Un succès de la demande de jeton sera de retour standard jeton d’accès au format JSON: {"access_token":"asa9329bc56c777d4df84e9c0d3b6535","expires_in":3600,"token_type":"bearer"} 1 {"access_token":"asa9329bc56c777d4df84e9c0d3b6535","expires_in":3600,"token_type":"bearer"} 2. Mot de passe de la Subvention (Ressources Propriétaire de Subvention) Des ressources du Propriétaire nom d’utilisateur et mot de passe sont fournis avec la demande, et un jeton est émis lors de l’authentification réussie. $ curl-u clientId:clientSecret "https://www.demo.com/token" -d 'grant_type=mot de passe&username=demouser&password=pass' 1 $ curl-u clientId:clientSecret "https://www.demo.com/token" -d 'grant_type=mot de passe&username=demouser&password=pass' La réussite de l’Authentification entraînera jeton d’accès, {"access_token":"as804f13b9asv1312cc346b7d25177f463edd","expires_in":3600,"token_type":"bearer","scope":null} 1 {"access_token":"as804f13b9asv1312cc346b7d25177f463edd","expires_in":3600,"token_type":"bearer","scope":null} 3. Informations d’Identification du Client Grant Le client utilise ses informations d’identification pour récupérer un jeton d’accès directement, ce qui permet l’accès à des ressources dans le cadre du système de contrôle du client $ curl-u clientId:clientSecret "https://www.demo.com/token" -d 'grant_type=client_credentials' {"access_token":"6f05ad622a3d32a5a81aee5d73a5826adb8cbf63","expires_in":3600,"token_type":"bearer","scope":null} 1 $ curl-u clientId:clientSecret "https://www.demo.com/token" -d 'grant_type=client_credentials' {"access_token":"6f05ad622a3d32a5a81aee5d73a5826adb8cbf63","expires_in":3600,"token_type":"bearer","scope":null} Note: jeton d’Accès généré par le client des informations d’identification de subvention ne peut être utilisé pour lire la ressource. depuis ces jeton d’Accès n’est pas authentifié par un utilisateur. 4. Actualiser Jeton Grant Jeton d’accès(s) a une durée de vie limitée. donc, nous avons besoin de rafraîchir jeton expiré à l’aide d’actualisation des jetons fournis avec des jetons d’accès. Demande: $ curl-u clientId:clientSecret "https://www.demo.com/token" -d 'grant_type=refresh_token&refresh_token=c54adab1d99d10bnf8sbe3b77ec32a2e402ef7e3' 1 $ curl-u clientId:clientSecret "https://www.demo.com/token" -d 'grant_type=refresh_token&refresh_token=c54adab1d99d10bnf8sbe3b77ec32a2e402ef7e3' Résultat sur la réussite de demande: {"access_token":"0e9d02499fe06762ecaafb9cfbb506676631dcfd","expires_in":3600,"token_type":"bearer","scope":null} 1 {"access_token":"0e9d02499fe06762ecaafb9cfbb506676631dcfd","expires_in":3600,"token_type":"bearer","scope":null} Demande une ressource de point de terminaison: Si vous demande de ressource Sécurisée effet garanti api pare-feu (fos_oauth: true), sans aucun jeton d’accès. ensuite, il faudra en conséquence, { "erreur": "access_denied", "error_description": "OAuth2 authentification requise" } 1234 {"erreur": "access_denied","error_description": "OAuth2 authentification requise"} pour demander des ressources sécurisées, ajouter l’Autorisation en-tête de demande $ curl-X GET -H "Autorisation: Porteur 974A0ACDF2F5CADDB57A53B23BABDEB57889ASS4A0ACDF2F5C893B57553B23BABDEB5" "http://www.demo.com/resource.json" 1 $ curl-X GET -H "Autorisation: Porteur 974A0ACDF2F5CADDB57A53B23BABDEB57889ASS4A0ACDF2F5C893B57553B23BABDEB5" "http://www.demo.com/resource.json" renvoyer des données à partir de symfony contrôleur: Dans la manette correspondante des ressources.json de données de retour <?php use Symfony\Component\Security\Core\Exception\AccessDeniedException; use Symfony\Component\HttpFoundation\Response; // ... classe DemoController s'étend FOSRestController { fonction publique getDemosAction() { $user = $this->get('security.context')->getToken()->getUser(); // Faire quelque chose avec les entièrement utilisateur authentifié. // $json = []; $response = new Response(json_encode($json)); $response->headers->set('Content-Type', 'application/json'); return $response; } } 1234567891011121314151617181920 <?php use Symfony\Component\Security\Core\Exception\AccessDeniedException;use Symfony\Component\HttpFoundation\Response; // ...classe DemoController s'étend FOSRestController{fonction publique getDemosAction(){$user = $this->get('security.context')->getToken()->getUser(); // Faire quelque chose avec les entièrement utilisateur authentifié.// $json = []; $response = new Response(json_encode($json)); $response->headers->set('Content-Type', 'application/json');return $response;}} Suggestions: Retour adapté le code d’état avec la réponse. au Lieu de s’appuyer sur le code de statut HTTP entier dans votre code, utiliser des constantes à partir de la classe de Réponse. Si vous utilisez réponse json, puis utiliser les JsonResponse de Classe au lieu de Réponse de la Classe. Exemple: <?php use Symfony\Component\Security\Core\Exception\AccessDeniedException; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\JsonResponse; // ... classe DemoController s'étend FOSRestController { // ... fonction publique getDemosAction() { $user = $this->get('security.context')->getToken()->getUser(); // Faire quelque chose avec les entièrement utilisateur authentifié. // $json = []; de retour de nouvelle JsonResponse($json, Réponse::HTTP_OK); } } 12345678910111213141516171819 <?php use Symfony\Component\Security\Core\Exception\AccessDeniedException;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\HttpFoundation\JsonResponse; // ...classe DemoController s'étend FOSRestController{// ... fonction publique getDemosAction(){$user = $this->get('security.context')->getToken()->getUser(); // Faire quelque chose avec les entièrement utilisateur authentifié.// $json = [];de retour de nouvelle JsonResponse($json, Réponse::HTTP_OK);}} qui Plus est: Maintenant, vous avez la plate-forme pour le développement de l’Api. donc, aller sur et en développer un. Depuis Api est indépendant de la plateforme, de sorte qu’il peut être consommé par toutes les Api Client. Tag(s) api oauth2 rest uvdesk Category(s) API uvdesk