11mltech / spa-skill-backend

Alexa Skill / Google Action backend code implemented on AWS Lambda
0 stars 0 forks source link

Implementar la interfaz Authorization.AcceptGrant #6

Open lumtvn opened 2 years ago

lumtvn commented 2 years ago

Va a llegar al handler de lambda cuando ~un usuario esta haciendo Account Linking o cuando un usuario quiere usar un spa. Puede que llegue un authorization code o un access code~ se quiere dar una respuesta asincrona y se necesita autenticar la skill con respecto a Amazon usando el token del usuario.

Nombre del test: AcceptGrant_Directive

Parametros:

image

lumtvn commented 2 years ago

no me queda claro como funciona lo de guardar el token dentro de lambda. Tendria que usar alguna bdd?

dmanto commented 2 years ago

Seguramente hay cosas que se necesitan guardar, y para esto AWS tiene varias opciones de DB (una se llama Dynamo, no estoy seguro).

Pero para el caso particular del token no creo que haga falta. El token o el codigo que devuelve la autenticación capaz que los guarda alexa y los usa ya cuando llama a la lambda.

Es que de alguna forma la funcion lambda necesita saber para que spa es la accion que le estan pidiendo, y no se me ocurre otra forma que Alexa guarde los datos del resultado de la autenticacion cuando el usuario registro el skill y despues adjunta ese dato al llamar a la funcion lambda que necesite cada vez que el tipo pide algo

lumtvn commented 2 years ago

Si la directiva me incluye un código, yo negocio ese código por un token en el servidor. Debería entonces devolver el token a Alexa en la respuesta de la directiva? No aclara eso en la documentación, pero teniendo en cuenta esto que decís, habría que devolverlo.

Me genera dudas esto porque yo tenía entendido que la autorización la hacia Alexa con el servidor, y una vez que Alexa llama a Lambda es porque hay un request de un usuario del cual Alexa ya posee un token que lo autentica. Asumiendo esto, no habría ninguna razón para hacer un handler dentro de alexa para conseguir un token.

lumtvn commented 2 years ago

Bueno me puse a leer un poco mas y estaba entendiendo mal. El codigo y token que llegan a esta directiva no son para autenticar al usuario contra el sistema nuestro, eso se hace en el account linking. Esta directiva se usa para poder hacer respuestas asincronas a Alexa. https://developer.amazon.com/en-US/docs/alexa/smarthome/send-events-to-the-alexa-event-gateway.html

Para las respuestas asincronas se usa el Alexa Event Gateway y para eso hace falta un segundo proceso de OAuth2.0 que se hace ahora si obligatoriamente contra Login with Amazon. Pero es de esperar ya que se usa la cuenta del cliente en Amazon para poder autenticarlo y poder, de forma segura, enviarle informacion asincrona desde el servidor nuestro a su cuenta de amazon y finalmente a su aplicacion de Alexa. Podemos usar esto para cuando el display esta colgado en "Econ" y queremos enviarle la temperatura. Lo hariamos de forma asincrona usando este Event Gateway

lumtvn commented 2 years ago

Seguramente hay cosas que se necesitan guardar, y para esto AWS tiene varias opciones de DB (una se llama Dynamo, no estoy seguro).

Dentro de la documentacion dice que los tokens de usuario para pegarle a LWA se tienen que guardar dentro de lambda asi que vamos a tener que usar una bdd para eso.

lumtvn commented 2 years ago

Seguramente hay cosas que se necesitan guardar, y para esto AWS tiene varias opciones de DB (una se llama Dynamo, no estoy seguro).

Dentro de la documentacion dice que los tokens de usuario para pegarle a LWA se tienen que guardar dentro de lambda asi que vamos a tener que usar una bdd para eso.

Me da estas opciones: Amazon Web Services (AWS) DynamoDB or a secure token store in your device cloud. Se podrian guardar en GoDaddy? @dmanto

dmanto commented 2 years ago

Si, las podemos guardar localmente, sobre todo porque cuando haya que mandar algún evento (por ejemplo algo que cambió en el spa), necesitamos tener esos tokens a mano según lo que leí en la doc que pasaste.

Dentro de la aplicación web en el servidor de GoDaddy tenemos dos BD, una postgresql donde se guardan los datos de cada SPA, y una Redis que se usa mas para mensajes internos entre partes de la aplicación. En cualquiera de las dos podemos guardar estos tokens, de manera de que cuando tengamos un evento para reportarle al servicio de AWS los incluimos para que Alexa sepa a que usuario / skill, etc corresponde.