【问题标题】:Setting redirect when accessing Cognito via sk-auth通过 sk-auth 访问 Cognito 时设置重定向
【发布时间】:2022-01-06 10:50:25
【问题描述】:

我使用 SvelteKit 构建了一个 Svelte 应用程序,该应用程序使用 Cognito 进行身份验证。我使用了以下站点:Cognito authentication for your SvelteKit app 指导我进行设置。当通过npm run dev 在本地开发中运行时,该应用程序和与 Cognito 的连接运行良好,但是,当通过npm run build 和 pm2 start /build/index.js 在 EC2 服务器上运行时,它设置了 redirect_uri 部分到 http://localhost:3000 的 Cognito URI。我不知道如何让它重定向到我的实际域。

这里有一些相关的代码 sn-ps 说明它目前在 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]
});

转到 Cognito 时的预期 URL

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

转到 Cognito 时的实际 URL

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

如您所见,它试图将 redirect_uri 设置为http://localhost:3000,而不是预期的https://example.com。我很确定在去 Cognito 时有一些设置允许它设置正确的 redirect_uri - 任何想法或建议将不胜感激!

【问题讨论】:

    标签: amazon-ec2 amazon-cognito svelte sveltekit


    【解决方案1】:

    据我所知,查看sk-auth 模块源代码,redirect_uri 似乎不是一个有效的配置选项。尝试在全局 SkAuth 构造函数中设置 host 配置选项:

    const config = {
      accessTokenUrl: `https://${DOMAIN}/oauth2/token`,
      profileUrl: `https://${DOMAIN}/oauth2/userInfo`,
      authorizationUrl: `https://${DOMAIN}/oauth2/authorize`,
      // redirect_uri: 'https://example.com',
      clientId: myAWSclientID,
      clientSecret: myAWSclientSecret,
      scope: ['openid', 'email'],
      id: 'cognito',
      contentType: 'application/x-www-form-urlencoded'
    };
    .
    .
    export const appAuth = new SvelteKitAuth({
      providers: [oauthProvider],
      host: 'https://example.com',
    });
    

    进一步浏览源码后,还可以在provider配置上设置AuthCallbacks接口提供的redirect选项:

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

    顺便说一下,作者在您提到的教程中使用的就是这个。

    【讨论】:

    • “redirect_url”实际上是一个错字,只是在我之前的评论中更正了它,但是,它没有用,但是你第一个设置主机选项的建议就像一个魅力......谢谢
    • 是的,Dan6erbond 链接中提到的问题似乎确实相关,因为它似乎没有获取我的重定向值,因此使用主机选项是唯一对我有用的解决方案。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    • 2022-12-09
    • 1970-01-01
    • 2012-08-27
    • 2018-05-31
    • 1970-01-01
    相关资源
    最近更新 更多