es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo llamo a mi RestAPI segura de Cognito desde el navegador cuando uso next-auth?

Tengo una RestApi de AWS asegurada por AWS Cognito. Además, tengo una aplicación NextJS que utiliza next-auth para proporcionar autenticación de usuarios contra el grupo de usuarios de Cognito.

Ahora quiero llamar directamente a la RestApi desde el navegador, pero no encuentro una forma de incluir las credenciales adecuadas. Dado que las únicas cookies presentes en mi aplicación web comienzan con next-auth-, asumo que no son adecuadas para esta tarea.

Entonces, ¿cómo puedo acceder al token de acceso desde el navegador?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para acceder al token de acceso desde el navegador, puedes utilizar el paquete aws-sdk en conjunto con amazon-cognito-identity-js. Primero, obtén el idToken de next-auth y úsalo para autenticarte con Cognito utilizando amazon-cognito-identity-js. Una vez autenticado, utiliza el paquete aws-sdk para generar las credenciales de AWS utilizando accessKeyId, secretAccessKey y sessionToken devueltos por Cognito. Por último, utiliza estas credenciales para realizar llamadas a la API de AWS RestApi.

    Aquí tienes un código de ejemplo para empezar:

    import { CognitoUserPool, CognitoUser } from 'amazon-cognito-identity-js';
    import { Config, CognitoIdentityCredentials } from 'aws-sdk';
    
    const userPool = new CognitoUserPool({
      UserPoolId: 'TU_USER_POOL_ID',
      ClientId: 'TU_APP_CLIENT_ID'
    });
    
    const accessToken = await getTokenFromNextAuth(); // obtén el accessToken de next-auth
    const cognitoUser = userPool.getCurrentUser();
    
    if (cognitoUser) {
      cognitoUser.getSession( (err, session) => {
        if (err) {
          console.error(err);
        } else {
          const cognitoCredentials = new CognitoIdentityCredentials({
            IdentityPoolId: 'TU_IDENTITY_POOL_ID',
            Logins: {
              [`cognito-idp.${Config.region}.amazonaws.com/${Config.credentialsParams.userPoolId}`]: session.getIdToken().getJwtToken()
            }
          });
    
          cognitoCredentials.get( (err) => {
            if (err) {
              console.error(err);
            } else {
              const awsCredentials = {
                accessKeyId: cognitoCredentials.accessKeyId,
                secretAccessKey: cognitoCredentials.secretAccessKey,
                sessionToken: cognitoCredentials.sessionToken
              };
    
              // utiliza awsCredentials para llamar a la API con aws-sdk
            }
          });
        }
      });
    }
    

Comments are closed.