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.

Configuración de redirección al acceder a Cognito a través de sk-auth

He creado una aplicación Svelte usando SvelteKit que utiliza Cognito para la autenticación. Utilicé el siguiente sitio web: Cognito authentication for your SvelteKit app como guía para configurarlo. La aplicación y la conexión con Cognito funcionan bien cuando se ejecuta en desarrollo local a través de “npm run dev”, sin embargo, cuando se ejecuta en producción en un servidor EC2 via “npm run build” y “pm2 start /build/index.js” se establece la parte “redirect_uri” de la URI de Cognito a “http://localhost:3000”. No puedo encontrar la manera de cambiar el “redirect_uri” a mi dominio real.

Aquí hay algunos fragmentos de código relevantes sobre cómo está configurado actualmente en EC2:

/etc/nginx/sites-available/domain.conf

server {
server_name example.com;

location / {
    root /var/www/html/build;
    proxy_pass http://localhost:3000;
}

listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

}

svelte.config.js

import node from ‘@sveltejs/adapter-node’;

/** @type {import(‘@sveltejs/kit’).Config} */
const config = {
kit: {
target: ‘#svelte’,
adapter: node({
out: ‘build’,
precompress: false,
env: {
host: ‘example.com’,
port: ‘443’
}
})
}
};

export default config;

/src/lib/auth.js

import { SvelteKitAuth, Providers } from ‘sk-auth’;

const DOMAIN = ‘myapi.auth.us-east-1.amazoncognito.com’;

const config = {
accessTokenUrl: https://${DOMAIN}/oauth2/token`,
profileUrl:
https://${DOMAIN}/oauth2/userInfo`,
authorizationUrl: `https://${DOMAIN}/oauth2/authorize`,
redirect: ‘https://example.com’,
clientId: myAWSclientID,
clientSecret: myAWSclientSecret,
scope: [‘openid’, ’email’],
id: ‘cognito’,
contentType: ‘application/x-www-form-urlencoded’
};

const oauthProvider = new Providers.OAuth2Provider(config);

export const appAuth = new SvelteKitAuth({
providers: [oauthProvider]
});

URL esperada al ir a Cognito:

https://myapi.auth.us-east-1.amazoncognito.com/login?state=cmVkaXJlY3Q9Lw%3D%3D&nonce=699&response_type=code&client_id=myAWSclientID&scope=openid+email&redirect_uri=https%3A%2F%2Fexample.com%2Fapi%2Fauth%2Fcallback%2Fcognito%2F

URL actual al ir a Cognito:

https://myapi.auth.us-east-1.amazoncognito.com/login?state=cmVkaXJlY3Q9Lw%3D%3D&nonce=699&response_type=code&client_id=myAWSclientID&scope=openid+email&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fapi%2Fauth%2Fcallback%2Fcognito%2F

Como puedes ver, intenta establecer el “redirect_uri” en “http://localhost:3000” en lugar del “https://example.com” esperado. Estoy seguro de que hay una configuración en algún lugar para permitir que se establezca el “redirect_uri” correcto al ir a Cognito, ¿alguna idea o sugerencia sería apreciada?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Problema con la configuración de redirect_uri en Cognito al ejecutar SvelteKit en producción en un servidor EC2

    Problema

    La porción redirect_uri de la URI de Cognito está configurada en http://localhost:3000` cuando se ejecuta la aplicación SvelteKit en producción en un servidor EC2 mediantenpm run buildypm2 start /build/index.js. Se espera que la redirect_uri seahttps://example.com`.

    Solución

    Para configurar la redirect_uri con el valor deseado, siga los siguientes pasos:

    1. Actualice la sección location en /etc/nginx/sites-available/domain.conf de la siguiente manera:
      location / {
       root /var/www/html/build;
       proxy_pass http://localhost:3000;
       proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto https;
      }
      

      Esto establecerá el encabezado X-Forwarded-Proto en https al reenviar solicitudes a la aplicación SvelteKit.

    2. Actualice la configuración de oauthProvider en /src/lib/auth.js de la siguiente manera:

      const config = {
       // otras propiedades de configuración
       redirect: 'https://example.com/api/auth/callback/cognito/',
       additionalAuthorizeParams: {
         'client_id': myAWSclientId,
         'response_type': 'code',
         'scope': 'openid email',
         'redirect_uri': 'https://example.com/api/auth/callback/cognito/'
       }
      };
      

      Esto establecerá el parámetro redirect_uri en `https://example.com/api/auth/callback/cognito/`.

    3. Actualice la configuración de svelte.config.js de la siguiente manera:

      import node from '@sveltejs/adapter-node';
      
      const config = {
       kit: {
         // otras propiedades de configuración
         adapter: node({
           out: 'build',
           precompress: false,
           env: {
             host: 'example.com',
             port: '443'
           },
           proxy: {
             '/api': {
               target: 'http://localhost:3000',
               headers: {
                 'X-Forwarded-Proto': 'https'
               }
             }
           }
         })
       }
      };
      
      export default config;
      

      Esto establecerá el encabezado X-Forwarded-Proto en https para solicitudes reenviadas a recursos /api.

    Después de realizar estos cambios, npm run build y pm2 start /build/index.js deberían establecer la porción redirect_uri de la URI de Cognito en el valor esperado, `https://example.com/api/auth/callback/cognito/`.

Comments are closed.