Neste Artigo vamos continuar a nossa jornada com a api de desenvolvimento do uso de Oauth2 como Protocolo de Autorização. O nosso Anterior Api de desenvolvimento de artigos abaixo: Soap VS Resto Rest Api Entender OAuth2: A autorização OAuth 2.0 framework permite que um aplicativo de terceiros para obter acesso limitado a um serviço de HTTP, o nome de um recurso proprietário. aqui estão alguns links que achei útil: knpuniversity screencast Oauth.net rfc6749 Proposta de Padrão de OAuth2 OAuth2 com o Symfony:: Symfony dispõe de FOSOAuthServerBundle, que pode ser utilizado para a implementação do lado do servidor de OAuth2. instructions pode ser encontrada here. Autorizar e token de rotas “@FOSOAuthServerBundle/Resources/config/routing/authorize.xml” & “@FOSOAuthServerBundle/Resources/config/routing/token.xml”, definidos no roteiro.yml será utilizado para a geração de token de acesso. Um OAuth Servidor tem 3 pontos de extremidade. Cada ponto de extremidade executa uma função distinta no OAuth processo. Autorizar o ponto de Extremidade – O usuário é redirecionado aqui pelo cliente para autorizar o pedido. o Token ponto final – que O cliente faz um pedido para esse ponto de extremidade para obter um Token de Acesso. Este é o mesmo token URL definida em encaminhamento.yml. o Fonte Parâmetro(s) – O cliente fornece um token de acesso válido para pedidos de um recurso(s) sobre este ponto, como e/ou usuários.json. Grant em OAuth2: OAuth2 fornece diversos tipos de Subsídios. Estes Tipos de Subsídio permitem que você exponha várias maneiras para um cliente para gerar um Token de Acesso. 1. O Código de Autorização: O código de autorização a conceder tipo é usado quando o cliente deseja solicitar o acesso a recursos protegidos em nome de outro usuário (i.e. uma festa de 3). Leia mais sobre o código de autorização Exemplo de Pedido de Códigos de autorização são recuperados usando a Autorizar o Controlador. O cliente envia o usuário para o OAuth servidor Autorizar a URL. Passo 1: Primeiro de tudo, redirecionar o usuário para a Autorizar 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 Um pedido bem sucedido, irá automaticamente passar o cliente o código de autorização na URL (o fornecido redirect_uri URL) https://redirecturi.com/processToken?code=SplxlOBeZQQYbYS6WxSbIA&state=xyz 1 https://redirecturi.com/processToken?code=SplxlOBeZQQYbYS6WxSbIA&state=xyz Passo 2: depois de um token podem ser solicitadas usando o código de autorização de url de token, $ 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" O sucesso de um pedido de token irá retornar um padrão token de acesso em formato JSON: {"access_token":"asa9329bc56c777d4df84e9c0d3b6535","expires_in":3600,"token_type":"bearer"} 1 {"access_token":"asa9329bc56c777d4df84e9c0d3b6535","expires_in":3600,"token_type":"bearer"} 2. Senha (proprietário do Recurso de Subvenção) O Proprietário do recurso de nome de utilizador e palavra-passe fornecidas na solicitação, e um token é concedido após uma autenticação bem-sucedida. $ 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' A Autenticação bem-sucedida irá resultar em um token de acesso, {"access_token":"as804f13b9asv1312cc346b7d25177f463edd","expires_in":3600,"token_type":"bearer","scope":null} 1 {"access_token":"as804f13b9asv1312cc346b7d25177f463edd","expires_in":3600,"token_type":"bearer","scope":null} 3. As Credenciais do cliente Conceder O cliente usa as credenciais para obter um token de acesso diretamente ao acesso a recursos no contexto do controlo do cliente $ 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} Nota: token de Acesso gerado pelo cliente credenciais de subvenção pode ser utilizado somente para a leitura da fonte. uma vez que tal um token de acesso não autenticado por um usuário. 4. Atualização Token Conceder Token de acesso(s) tem um ciclo de vida limitado. assim, temos que atualizar expira o token de atualização token de tokens de acesso. $ 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' Resultar em uma solicitação bem-sucedida: {"access_token":"0e9d02499fe06762ecaafb9cfbb506676631dcfd","expires_in":3600,"token_type":"bearer","scope":null} 1 {"access_token":"0e9d02499fe06762ecaafb9cfbb506676631dcfd","expires_in":3600,"token_type":"bearer","scope":null} a Solicitação para um recurso de ponto de extremidade: Se você tiver quaisquer perguntas recurso Protegido do ponto de extremidade na api segura firewall (fos_oauth: true), sem um token de acesso. em seguida, ele irá resultar em, { "error": "error_access_denied", "error_description": "OAuth2 authentication required" } 1234 {"error": "error_access_denied","error_description": "OAuth2 authentication required"} para solicitar um seguro de recurso, adicione Autorização cabeçalho de solicitação de $ curl -X -H "Authorization: Bearer 974A0ACDF2F5CADDB57A53B23BABDEB57889ASS4A0ACDF2F5C893B57553B23BABDEB5" "http://www.demo.com/resource.json" 1 $ curl -X -H "Authorization: Bearer 974A0ACDF2F5CADDB57A53B23BABDEB57889ASS4A0ACDF2F5C893B57553B23BABDEB5" "http://www.demo.com/resource.json" retornar os dados do symfony controlador: O controlador correspondente para o recurso.dados json de volta <?php use Symfony\Component\Security\Core\Exception\AccessDeniedException; use Symfony\Component\HttpFoundation\Response; // ... class DemoController extends FOSRestController { public function getDemosAction() { $user = $this->get('security.context)->getToken()->getUser(); // Do something with the fully authenticated user. // $json = []; $response = new Response(json_encode($json)); $response->head->set('Content-Type', 'application/json'); return $response; } } 1234567891011121314151617181920 <?php use Symfony\Component\Security\Core\Exception\AccessDeniedException;use Symfony\Component\HttpFoundation\Response; // ...class DemoController extends FOSRestController{public function getDemosAction(){$user = $this->get('security.context)->getToken()->getUser(); // Do something with the fully authenticated user.// $json = []; $response = new Response(json_encode($json));$response->head->set('Content-Type', 'application/json');return $response;}} Dicas: Retorno adequado estado de código, juntamente com a resposta. em Vez de depender de código de status do HTTP como número inteiro no seu código, usar constantes da classe de Resposta. Se você estiver usando json de resposta e, em seguida, use JsonResponse de Classe em vez de Resposta Classe. Exemplo: <?php use Symfony\Component\Security\Core\Exception\AccessDeniedException; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\JsonResponse; // ... class DemoController extends FOSRestController { // ... public function getDemosAction() { $user = $this->get('security.context)->getToken()->getUser(); // Do something with the fully authenticated user. // $json = []; return new JsonResponse($json, Response::HTTP_OK); } } 12345678910111213141516171819 <?php use Symfony\Component\Security\Core\Exception\AccessDeniedException;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\HttpFoundation\JsonResponse; // ...class DemoController extends FOSRestController{// ...public function getDemosAction(){$user = $this->get('security.context)->getToken()->getUser(); // Do something with the fully authenticated user.// $json = [];return new JsonResponse($json, Response::HTTP_OK);}} Mais: Agora, você tem a plataforma para o desenvolvimento da Api. então, vá em frente e se desenvolver. Como a Api é independente de plataforma, assim ele poderá ser usado por qualquer adequados a Api do Cliente. Tag(s) api oauth2 rest uvdesk Category(s) API uvdesk