Blog

Cómo configurar Alexa Account Linking con Amazon Cognito

alexa_amazon cognito

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. 

Account Linking_AWS

 

En primer lugar accedemos al servicio de Cognito y seleccionamos la opción Manage User Pools:

Amazon Cognito

 

Seleccionamos “Create a User Pool” y obtendremos una pantalla igual a ésta:

Amazon Cognito_userpool

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

Amazon Cognito_attributes

El apartado Policies lo dejamos por defecto.

MFA and verifications, no olvidéis que debéis crear el rol.

Amazon Cognito_MFA

El resto de secciones las dejamos por defecto, hasta que lleguemos al apartado App Clients y seleccionemos Add an app client.

Amazon Cognito_appclient

Es muy importante en este caso seleccionar la opción “Generate Client Secret”. Para hacerlo ponemos un nombre y creamos nuestra primera App Client.

AmazonCognito_appclient1

Revisamos la configuración y ya podemos crear nuestro User Pool.

Amazon Cognito_create user pool

Una vez creado el User Pool aparecerán nuevas opciones en el menú:

Amazon Cognito_ menu

Si seleccionas “App integration” veréis que se refiere al cliente creado en los pasos anteriores.

Amazon Cognito_ app integration

Lo siguiente será asignar un nombre al dominio.

Amazon Cognito_ 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.

Amazon Cognito_ account linking

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.

Amazon Cognito_ Auth Code Grant

Vamos a nuestro servicio de Amazon Cognito y copiamos la url de nuestro dominio creado:

Amazon Cognito_ domain

En nuestro caso es https://alexa-test.auth.eu-west-1.amazoncognito.com

Bien, con esta url podemos rellenar los primeros dos campos:

  1. 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:

     2. Access Token URI:

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.

Amazon Cognito_ app client ID

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

Amazon Cognito_ OAuth

 

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:

Amazon Cognito_ 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:  

New call-to-action

Stay tunned for more content like this.

Linke SAP on AWS
Key steps to adopt Devops on a Cloud-Native Company
Download The Linke AWS Connector for SAP in PDF