Está en la página 1de 10

Configuración Servicio Oauth

Instalación de la Libreria
Descargamos la librería Oauth para php desde la url

https://bshaffer.github.io/oauth2-server-php-docs/

Ir a la url de GitHub y descargar la librería en formato Zip


En el proyecto web, desempaquetar el contenido del archivo

Configuracion BD
Ir a la dirección https://bshaffer.github.io/oauth2-server-php-docs/cookbook/ , y copiar el
esquema y en gestor de BD para este caso se utilizará mysql como motor de base de datos.
Para nuestro caso usaremos phpMyAdmin para trabajar con la BD Mysql.

Configurando Rest Client


Rest Client es un herramienta que permitirá hacer consultas y pruebas web, para ello añadir la
extensión a Google Chrome.

Se creará un botón para poder acceder a la herramienta

Se recomienda que se vincule o cree un cuenta de modo que pueda trabajar y almacenar los
cambios.
Se puede cambiar el método a POST y agregar parámetros de envio, para el ejemplo se agregó
el atributo “accion” y su valor “listar”, enviamos la petición y nos retorna la información
obtenida, además podemos guardar las consultas a fin de poder trabajar posteriormente.

Configurando el Arranque del Servicio


Para ello creamos un archivo “server.php”, y copiamos el boostrap de la página y modificamos
adaptando al proyecto que ya tenemos definido.
De la figura anterior, se ha establecido dos servicios Oauth, trabajaremos con ClientCredentials
(token simple) y el UserCredentials (token por autenticación por usuario y clave).

Agregamos un archivo “toke.php”, el cual se encargará de hacer generar los tokens tanto para
ClientCredentials y UserCredentials.

Quedando nuestra estructura web de la siguiente forma:

Oauth – ClientCredentials
En phpMyAdmin agregar la siguiente instrucción:
INSERT INTO oauth_clients (client_id, client_secret, redirect_uri, grant_types)
VALUES ("testclient", "testpass", "http://localhost/", "client_credentials");
Vamos a realizar la prueba para verificar que el token se genera, para ello agregamos una
nueva solicitud.

Configuramos la url (http://localhost/volley/oauth/token.php) y agregamos en la sección del


Headers la autorización y se sugiere usar el método POST para las peticiones, y agregamos el
parámetro “grant_type”, cuyo valor será client_credentials.

Una vez enviada la petición (send) si todo es conforme nos retornará el token de acceso
(access_token), la cual deberá ser enviada en cada petición.

En caso de algún fallo aparecerá el mensaje de error


En el archivo “ubigeo.php” ubicado en “oauth/remote/” y agregamos la línea que valida la
autenticación antes de ejecutar las líneas de código.

Vamos hacer una prueba de verificación, regresamos al Rest Client, y agregamos una nueva
petición (add request), con la siguiente url: http://localhost/volley/oauth/remote/ubigeo.php
además de los parámetros que requiere ubigeo, se debe agregar el atributo access_token, la
que será asignada de la petición exitosa de la url ../token.php que se genero antes.

También se puede agregar en el header como un atributo Authorization seguido del bearer
más el access_token. (Eso se verá más adelante en el User Credentials).

En caso no enviemos el access_token, la petición nos enviará el código 401 (Error de


autorización), y finalizará la petición o si el token no es válido.
Oauth – UserCredentials
En phpMyAdmin agregar la siguiente instrucción:
/*Tabla de Alcances*/
INSERT INTO `oauth_scopes` (`scope`, `is_default`)
VALUES ('mobile', '1');

/*Tabla de Autorizacion de Clientes*/


INSERT INTO `oauth_clients` (`client_id`, `client_secret`, `redirect_uri`,
`grant_types`, `scope`, `user_id`) VALUES ('TestAuth', 'PwdAuth', 'none',
'password refresh_token', 'mobile', NULL);

/*Tabla de Usuarios*/
INSERT INTO `oauth_users` (`username`, `password`, `first_name`, `last_name`,
`email`, `email_verified`, `scope`) VALUES ('henry',
'5c6948b2f2b09ab83bc5843e164e9d00e0491e5a', 'Henry O.', 'Villarreal Torres',
'henry.villarreal@demo.edu.pe', '1', 'mobile');

En la tabla oauth_clients, el campo grant_types indicamos que el cliente soportará


autenticación por password, el campo password que corresponde a la tabla oauth_users, esta
en sha1.

Cuando hacemos la prueba en el Rest Client, el atributo grant_type es “password”, no olvidar


que debemos agregar un autorización para el ejemplo será “TestAuth” la cual soporta la
autenticación por password
En caso de usar una cliente que no soporte la autenticación por password, notificará un error
por el tipo no autorizado.

En caso de estar todo conforme la respuesta nos indicará el access_token, similar al


client_credentials, y el token_type (Bearer) que servirá en el header para hacer autenticación
en las siguientes peticiones.

Para el ejemplo de ubigeo.php, la autorización utilizará el token como autorización en el


header, también podemos pasar el atributo como en el client_credentials la cual es agregada
como un atributo en los parámetros de post o get.

Se sugiere para User Credentials agregar el atributo Authorization en el header, y para los
client Credentials utilizar un parámetro GET o POST.
Oauth en Android
En el ejemplo, tenemos un servicio externo en webhostapp, definimos nuestros parámetros:

En la siguiente función, se realiza una petición (StringRequest), note que en el getHeaders,


agregamos el atributo Authorization a la que se le asigna (TokenCliente:TokenPassword) en
base 64. Además agregamos en getParams el atributo grant_type. En la función onResponse,
en caso de ser exitoso el retorno se evalua la cadena y se transforma en un JSON Object, luego
podremos extraer el atributo access_token.