En este Artículo vamos a continuar nuestro viaje con la api de desarrollo de la utilización de Oauth2 como Protocolo de Autorización. Nuestro Anterior de la Api de desarrollo de los artículos son los siguientes: Soap VS Resto Api de Rest Entender OAuth2: El marco de autorización de OAuth 2.0 permite a una aplicación de terceros para obtener acceso limitado a un servicio HTTP, el nombre de un propietario de los recursos. aquí hay algunos enlaces que he encontrado útil: knpuniversity screencast Oauth.net rfc6749 Propuesta de Norma de OAuth2 OAuth2 con Symfony:: Symfony ofrece FOSOAuthServerBundle, que puede ser utilizado para la implementación de servidor de OAuth2. instructions se puede encontrar here. Autorizar y token de rutas «@FOSOAuthServerBundle/Resources/config/routing/authorize.xml» & «@FOSOAuthServerBundle/Resources/config/routing/token.xml», definido en la hoja de ruta.yml será utilizado para la generación token de acceso. OAuth Servidor tiene 3 puntos finales. Cada uno de los parámetros se realiza una función distinta en el proceso OAuth. Autorizar Extremo – El usuario se redirige aquí por el cliente para autorizar la solicitud. el Token Extremo – El cliente hace una petición a este extremo para obtener un Token de Acceso. Este es el mismo token URL definida en enrutamiento.yml. el Fuente de Extremo(s) – El cliente proporciona un token de acceso válido para los pedidos de un recurso(s) en este extremo, como y/o usuarios.json. Grant en OAuth2: OAuth2 proporciona diferentes Subvención de tipos. Estos Subvención de Tipos le permiten exponer de múltiples maneras para que un cliente para generar un Token de Acceso. 1. El Código de Autorización: El código de autorización tipo de subvención se utiliza cuando el cliente quiere solicitar el acceso a los recursos protegidos en nombre de otro usuario (es decir, una 3 ª parte). Leer más sobre el código de autorización Ejemplo de Solicitud Los códigos de autorización se recuperan mediante la Autorizo al Controlador. El cliente envía al usuario a la OAuth servidor de Autorizar la URL. Paso 1: en Primer lugar, redirigir al usuario a Autorizar la 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 Un éxito de la solicitud de pasar automáticamente al cliente el código de autorización en la dirección URL (suministrado redirect_uri URL) como https://redirecturi.com/processToken?code=SplxlOBeZQQYbYS6WxSbIA&state=xyz 1 https://redirecturi.com/processToken?code=SplxlOBeZQQYbYS6WxSbIA&state=xyz Paso 2: después de un token puede ser solicitado mediante el código de autorización 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" Un éxito token de solicitud de devolución de un estándar token de acceso en formato JSON: {"access_token":"asa9329bc56c777d4df84e9c0d3b6535","expires_in":3600,"token_type":"bearer"} 1 {"access_token":"asa9329bc56c777d4df84e9c0d3b6535","expires_in":3600,"token_type":"bearer"} 2. (Contraseña de propietario de los Recursos de la Subvención) Propietario de los recursos del nombre de usuario y la contraseña proporcionada en la solicitud, y de un símbolo se otorga después de una autenticación exitosa. $ 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' La Autenticación es correcta resultará en un token de acceso, {"access_token":"as804f13b9asv1312cc346b7d25177f463edd","expires_in":3600,"token_type":"bearer","scope":null} 1 {"access_token":"as804f13b9asv1312cc346b7d25177f463edd","expires_in":3600,"token_type":"bearer","scope":null} 3. Las Credenciales del cliente Subvención El cliente utiliza las credenciales para recuperar un token de acceso directamente en el acceso a los recursos en el contexto del control del 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 Acceso generados por el cliente credenciales de subvención que puede ser utilizado sólo para la lectura de la fuente. puesto que un token de acceso no autenticado por un usuario. 4. Actualización de Token de Subvención Token de acceso(s) tiene un tiempo de vida limitado. por lo tanto, debemos actualizar caduca el token de actualización tokens de acceso. $ 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' Resultado en un éxito de la solicitud: {"access_token":"0e9d02499fe06762ecaafb9cfbb506676631dcfd","expires_in":3600,"token_type":"bearer","scope":null} 1 {"access_token":"0e9d02499fe06762ecaafb9cfbb506676631dcfd","expires_in":3600,"token_type":"bearer","scope":null} la Petición a un recurso extremo: Si usted tiene alguna pregunta recurso Protegido extremo en segura de la api de firewall (fos_oauth: true), sin un token de acceso. a continuación, se va a producir, { "error": "error_access_denied", "error_description": "OAuth2 authentication required" } 1234 {"error": "error_access_denied","error_description": "OAuth2 authentication required"} para solicitar un recurso seguro, agregar la Autorización encabezado en la solicitud $ 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" los datos de retorno de symfony controlador: En el controlador correspondiente para el recurso.datos json espalda <?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;}} Consejos: Retorno adecuado de código de estado junto con la respuesta. en Lugar de depender de código de estado HTTP como un entero en su código, usar constantes de la Respuesta de la clase. Si usted está usando json de respuesta, a continuación, utilice JsonResponse de la Clase en lugar de Respuesta de la Clase. Ejemplo: <?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);}} Más información: Ahora, usted tiene la plataforma para el desarrollo de la Api. así que adelante y desarrollarse. Debido a que la Api es independiente de la plataforma, por lo que puede ser utilizado por cualquier Cliente Api. Tag(s) api oauth2 rest uvdesk Category(s) API uvdesk