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`,
https://${DOMAIN}/oauth2/userInfo`,
profileUrl:
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?
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 mediante
npm run buildy
pm2 start /build/index.js. Se espera que la redirect_uri sea
https://example.com`.Solución
Para configurar la redirect_uri con el valor deseado, siga los siguientes pasos:
location
en/etc/nginx/sites-available/domain.conf
de la siguiente manera:Esto establecerá el encabezado
X-Forwarded-Proto
enhttps
al reenviar solicitudes a la aplicación SvelteKit.Actualice la configuración de
oauthProvider
en/src/lib/auth.js
de la siguiente manera:Esto establecerá el parámetro
redirect_uri
en `https://example.com/api/auth/callback/cognito/`.Actualice la configuración de
svelte.config.js
de la siguiente manera:Esto establecerá el encabezado
X-Forwarded-Proto
enhttps
para solicitudes reenviadas a recursos/api
.Después de realizar estos cambios,
npm run build
ypm2 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/`.