Cada vez son más las Skills que intentan dar una experiencia de usuario más personalizada ofreciendo información sobre el horario del colegio de tus hijos, tu factura de la luz, etc. Para conseguirlo es necesario identificarse en la Skill con un usuario y password a través de una plataforma externa. Account Linking de Alexa permite identificarnos en nuestra plataforma con Alexa usando el protocolo de autenticación OAuth2.
Este flujo de autenticación es sencillo para el usuario, pero puede llegar a ser ser complejo para el desarrollador. Es por ello que hemos creído interesante explicaros en este post cómo configurar, siguiendo unos sencillos pasos, un servidor de autenticación y configurar el Account Linking para poder hacer login en nuestra plataforma al activar la Skill.
Account Linking: Paso a paso
En nuestro caso usaremos el servicio de AWS Cognito para crear el servidor de autenticación, ya que es un servicio fácil de configurar y que todo el mundo puede probar ya que no vamos a exceder los límites de su capa gratuita.
En primer lugar accedemos al servicio de Cognito y seleccionamos la opción Manage User Pools:
Seleccionamos “Create a User Pool” y obtendremos una pantalla igual a ésta:
Nota: No entraremos en detalle de la configuración del servicio de autenticación ya que cada desarrollador tendrá una necesidad diferente. A continuación os mostramos una configuración básica.
Attributes
El apartado Policies lo dejamos por defecto.
MFA and verifications, no olvidéis que debéis crear el rol.
El resto de secciones las dejamos por defecto, hasta que lleguemos al apartado App Clients y seleccionemos Add an app client.
Es muy importante en este caso seleccionar la opción “Generate Client Secret”. Para hacerlo ponemos un nombre y creamos nuestra primera App Client.
Revisamos la configuración y ya podemos crear nuestro User Pool.
Una vez creado el User Pool aparecerán nuevas opciones en el menú:
Si seleccionas “App integration” veréis que se refiere al cliente creado en los pasos anteriores.
Lo siguiente será asignar un nombre al dominio.
Ahora, haremos un paréntesis e iremos a nuestra skill de Alexa, en concreto al apartado de Account Linking, y lo primero que haremos será habilitarlo. Dependiendo de vuestra Skill, deberéis activar o no el resto de opciones.
Y ahora toca configurar el Account Linking. Esta parte es bastante sencilla, seleccionamos la opción Auth Code Grants en donde vemos los campos que debemos rellenar con la información de nuestro servicio de autenticación recientemente creado.
Vamos a nuestro servicio de Amazon Cognito y copiamos la url de nuestro dominio creado:
En nuestro caso es https://alexa-test.auth.eu-west-1.amazoncognito.com
Bien, con esta url podemos rellenar los primeros dos campos:
- Authorization URI (Uniform Resource Identifier):
https://alexa-test.auth.eu-west-1.amazoncognito.com/oauth2/authorize?response_type=code&redirect_uri=https://pitangui.amazon.com/api/skill/link/
Como podéis ver, hemos añadido el path oauth2/authorize y los siguientes parámetros en la url:
- response_type=code
- redirect_uri= (éstos aparecen en la parte inferior de la vista de Account Linking). En este enlace podéis leer más sobre todo lo referente a estos parámetros y variables de Account Linking.
https://alexa-test.auth.eu-west-1.amazoncognito.com/oauth2/token
Client ID y Client Secret
Para obtener estos valores nos vamos de nuevo a nuestro servicio de Amazon Cognito, en concreto al menú App Client.
El resto lo podemos dejar tal cual.
Ahora ya podríamos probar la autenticación con el Account Linking. Una vez hecha la vinculación de la cuenta en Alexa obtendremos el access token del usuario, pero no podremos acceder a ningún recurso de nuestra API si ésta usa nuestro User Pool como authorizer.
Amazon Cognito espera el token ID y no el access_token con lo que si intentamos acceder a nuestra API con el access token obtendremos un "Unauthorized". Esto es debido a que Amazon Cognito usa el protocolo de autenticación OpenID, mientras que Alexa usa el protocolo de Autenticación OAuth2. Para poder solucionarlo, deberemos de ir al menú App client settings.
La configuración debe ser similar a la mostrada, fijaos que hemos marcado el check de Authorization Code Grant y el scope de OpenID, además hemos añadido todas las url de redirect (las podemos obtener del menú de Account Linking de Alexa) y la de logout que la construiremos de forma similar a las anteriores:
https://alexa-test.auth.eu-west-1.amazoncognito.com/logout?response_type=code
Guardamos los cambios y ya podemos hacer log in en nuestra skill. Ahora en cada invocación de la skill tendremos un Access Token. En el Access Token no tendremos toda la información del usuario, simplemente tendremos el username, al contrario que con el token_id donde teníamos toda la información. Para poder obtener la información del usuario (en caso de que lo necesitemos para nuestra Skill) podemos obtenerla a través de un enlace como este:
https://alexa-test.auth.eu-west-1.amazoncognito.com/oauth2/userInfo
Esta llamada la realizaremos enviando el Access Token en la cabecera.
Ejemplo de código en javascript:
Con este último punto hemos podido enumerar los pasos principales para poder configurar el servidor de autenticación de Alexa Account Linking a través de Amazon Cognito.
Siguiendo estas instrucciones ya estará todo listo para poder activar vuestra Alexa Skill y hacer log in.
En el siguiente artículo os mostraremos también como usar vuestro propio Front-end para hacer log in en lugar del proporcionado por Amazon Cognito. ¡Seguid atentos al blog!
Los asistentes virtuales de voz, como Alexa, están ganando terreno en las empresas y en la vida cotidiana. Si quieres saber un poco más sobre esta tecnología te invitamos a leer este otro artículo de Linke: