0

我有一个流星/nodeJs 应用程序需要连接到我的客户端进行身份验证。我这样设置了一个连接访问点(我只是匿名了各种值):

import Keycloak from "keycloak-connect";
import { WebApp } from "meteor/webapp";
import express from "express";
import session from "express-session";

const app = express();
const memoryStore = new session.MemoryStore();

app.use(
  session({
    secret: "secret",
    resave: false,
    saveUninitialized: true,
    store: memoryStore,
  })
);

const kcConfig = {
  clientId: "clientId",
  serverUrl: "realmUrl",
  realm: "clientName",
  realmPublicKey: "publicKey",
};

const keycloak = new Keycloak({ store: memoryStore }, kcConfig);
app.use(keycloak.middleware());

app.get("/connect", keycloak.protect(), (req, res) => {
// doing my stuff here
  res.writeHead(301, {
    Location: "/connected",
  });
  res.end();
});

WebApp.connectHandlers.use(app);

问题是:

  • 当我在本地运行我的服务器并转到 /connect 链接时,我被重定向到连接平台。我连接并被发送回我的 localhost:3000/connected => 一切都按预期工作
  • 当我在生产环境中执行完全相同的流程时,我在第一次尝试登录后被拒绝访问(只有访问被拒绝写入的空白页面)。如果我随后手动返回 /connect 链接,我将直接连接(我想我正确获得了令牌并可以再次连接)

我不知道为什么两种环境的行为都不同,以及为什么我在生产时会收到拒绝访问的页面。

4

1 回答 1

0

正如评论中提到的,我的 ROOT_URL 有问题,留下了一个斜杠。去掉之后就好多了。

于 2021-09-30T13:30:03.610 回答