In dit Artikel zullen we vervolgen onze reis met api ontwikkeling van het gebruik van Oauth2 als Autorisatie Protocol. Onze Vorige Api ontwikkeling artikelen zijn hieronder te vinden: Zeep VS Rest Rest Api Begrijpen OAuth2: De OAuth 2.0 toestemming kader kan een toepassing van derden te verkrijgen beperkt toegang tot de HTTP-service, de naam van een resource-eigenaars. hier zijn een paar links, dat vond ik nuttig: knpuniversity screencast Oauth.net rfc6749 Voorgestelde Norm van OAuth2 OAuth2 met Symfony: Symfony biedt FOSOAuthServerBundle, welke gebruikt kan worden voor server-side implementatie van OAuth2. instructions kan gevonden worden here. Machtigen en token routes „@FOSOAuthServerBundle/Resources/config/routing/authorize.xml“ & „@FOSOAuthServerBundle/Resources/config/routing/token.xml“, gedefinieerd in de routering.yml zal worden gebruikt voor het toegangstoken generatie. Een OAuth-Server heeft 3 eindpunten. Elk eindpunt voert een duidelijke functie in de OAuth-proces. Machtigen Eindpunt – De gebruiker omgeleid hier door de opdrachtgever toestemming geven voor de aanvraag. Token Eindpunt – De klant een aanvraag doet naar dit eindpunt voor het verkrijgen van een Access Token. Dit is hetzelfde als token URL gedefinieerd in routering.yml. Bron Eindpunt(en) – De opdrachtgever zorgt voor een geldig toegangsbewijs voor het aanvragen van een resource(s) op dit eindpunt, zoals en/of gebruikers.json. Grant ‚ s in OAuth2: OAuth2 biedt verschillende Subsidie-types. Deze Subsidie Types staan je toe om bloot meerdere manieren om een klant voor het genereren van een Access Token. 1. De Autorisatie Code: De autorisatiecode subsidie type wordt gebruikt wanneer de klant wil zijn verzoek toegang tot beschermde bronnen op naam van een andere gebruiker (d.w.z. een 3e partij). Lees meer over de autorisatie code Voorbeeld Verzoek Autorisatiecodes zijn opgehaald met behulp van de Machtigen Controller. De client stuurt de gebruiker naar de OAuth-server te Machtigen URL. Stap 1: ten Eerste, de gebruiker omleiden naar de Machtigen 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 Een succesvolle aanvraag automatisch doorgeven van de opdrachtgever de autorisatiecode in de URL (de meegeleverde redirect_uri URL) als https://redirecturi.com/processToken?code=SplxlOBeZQQYbYS6WxSbIA&state=xyz 1 https://redirecturi.com/processToken?code=SplxlOBeZQQYbYS6WxSbIA&state=xyz Stap 2: na een token kan worden aangevraagd via de autorisatiecode van token 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' Een succesvolle token aanvraag zal terug een standaard access token in JSON formaat: {"access_token":"asa9329bc56c777d4df84e9c0d3b6535","expires_in":3600,"token_type":"bearer"} 1 {"access_token":"asa9329bc56c777d4df84e9c0d3b6535","expires_in":3600,"token_type":"bearer"} 2. Wachtwoord geven (Resource-eigenaars Toekennen) Resource Eigenaar van de gebruikersnaam en wachtwoord worden verstrekt bij de aanvraag, en een token wordt uitgereikt na een succesvolle authenticatie. $ curl -u clientId:clientSecret "https://www.demo.com/token" -d 'grant_type=password&username=demouser&password=pass' 1 $ curl -u clientId:clientSecret "https://www.demo.com/token" -d 'grant_type=password&username=demouser&password=pass' Succes Verificatie zal resulteren in een access token, {"access_token":"as804f13b9asv1312cc346b7d25177f463edd","expires_in":3600,"token_type":"bearer","scope":null} 1 {"access_token":"as804f13b9asv1312cc346b7d25177f463edd","expires_in":3600,"token_type":"bearer","scope":null} 3. Opdrachtgever Referenties Verlenen De client gebruikt de referenties voor het ophalen van een access token direct toegang tot middelen in het kader van de controle van de cliënt $ 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} Opmerking: Access token gegenereerd door de opdrachtgever referenties subsidie kan alleen worden gebruikt voor het lezen van bron. aangezien dergelijke toegangstoken is niet geverifieerd door een gebruiker. 4. Vernieuwen Token Verlenen Access token(s) heeft een beperkte levensduur. dus, we moeten vernieuwen token is verlopen met het vernieuwen van tokens toegang tokens. : $ 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' Resultaat op een succesvolle aanvraag: {"access_token":"0e9d02499fe06762ecaafb9cfbb506676631dcfd","expires_in":3600,"token_type":"bearer","scope":null} 1 {"access_token":"0e9d02499fe06762ecaafb9cfbb506676631dcfd","expires_in":3600,"token_type":"bearer","scope":null} de Aanvraag van een resource-eindpunt: Als u vragen Beveiligd resource eindpunt in beveiligde api firewall (fos_oauth: true) zonder een access token. dan zal het resultaat in, { "error": "access_denied", "error_description": "OAuth2 verificatie vereist" } 1234 {"error": "access_denied","error_description": "OAuth2 verificatie vereist"} voor het aanvragen van een beveiligde bron, toevoegen Authorization koptekst op aanvraag $ curl -X -H "Machtiging aan Toonder 974A0ACDF2F5CADDB57A53B23BABDEB57889ASS4A0ACDF2F5C893B57553B23BABDEB5" "http://www.demo.com/resource.json" 1 $ curl -X -H "Machtiging aan Toonder 974A0ACDF2F5CADDB57A53B23BABDEB57889ASS4A0ACDF2F5C893B57553B23BABDEB5" "http://www.demo.com/resource.json" de data terug van symfony controller: In de bijbehorende controller voor de resource.json data terug <?php gebruik Symfony\Component\Security\Core\Uitzondering\AccessDeniedException; gebruik Symfony\Component\HttpFoundation\de Reactie; // ... klasse DemoController breidt FOSRestController { de publieke functie getDemosAction() { $user = $this->get('beveiliging.context')->getToken()->getUser(); // Doe iets met de volledig geverifieerde gebruiker. // $json - = []; $reactie = new Reactie(json_encode($json)); $response->kop->set('Content-Type', 'application/json'); return $reactie; } } 1234567891011121314151617181920 <?php gebruik Symfony\Component\Security\Core\Uitzondering\AccessDeniedException;gebruik Symfony\Component\HttpFoundation\de Reactie; // ...klasse DemoController breidt FOSRestController{de publieke functie getDemosAction(){$user = $this->get('beveiliging.context')->getToken()->getUser(); // Doe iets met de volledig geverifieerde gebruiker.// $json - = []; $reactie = new Reactie(json_encode($json)); $response->kop->set('Content-Type', 'application/json');return $reactie;}} Tips: Terug geschikt status code, samen met het antwoord. in Plaats van te vertrouwen op HTTP status code als geheel getal in de code constanten gebruiken van de Reactie klasse. Als u met behulp van json-antwoord, gebruik dan JsonResponse Klasse in plaats van de Response Klasse. Voorbeeld: <?php gebruik Symfony\Component\Security\Core\Uitzondering\AccessDeniedException; gebruik Symfony\Component\HttpFoundation\de Reactie; gebruik Symfony\Component\HttpFoundation\JsonResponse; // ... klasse DemoController breidt FOSRestController { // ... de publieke functie getDemosAction() { $user = $this->get('beveiliging.context')->getToken()->getUser(); // Doe iets met de volledig geverifieerde gebruiker. // $json - = []; return new JsonResponse($json, Antwoord::HTTP_OK); } } 12345678910111213141516171819 <?php gebruik Symfony\Component\Security\Core\Uitzondering\AccessDeniedException;gebruik Symfony\Component\HttpFoundation\de Reactie;gebruik Symfony\Component\HttpFoundation\JsonResponse; // ...klasse DemoController breidt FOSRestController{// ... de publieke functie getDemosAction(){$user = $this->get('beveiliging.context')->getToken()->getUser(); // Doe iets met de volledig geverifieerde gebruiker.// $json - = [];return new JsonResponse($json, Antwoord::HTTP_OK);}} Wat Meer is: Nu, je hebt het platform voor het ontwikkelen van Api. dus ga op en ontwikkelen. Sinds Api is platform-onafhankelijk, zodat het kan worden gebruikt door elke geschikte Api-Client. Tag(s) api oauth2 rest uvdesk Category(s) API uvdesk