keycloak-connect nodejs / meteor - 仅在首次登录时访问被拒绝并且仅在生产时被拒绝
keycloak-connect nodejs / meteor - Getting access denied at first login only and prod only
我有一个 meteor/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 link 时,我被重定向到连接平台。我连接并被发送回我的 localhost:3000/connected => 一切正常
- 当我在生产环境中执行完全相同的流程时,我在第一次尝试登录后收到拒绝访问(空白页面,仅写入拒绝访问)。如果我然后手动返回 /connect link 我将直接连接(我想我正确地获得了令牌并且可以再次连接)
我不知道为什么两种环境下的行为不同,以及为什么我在生产环境中收到访问被拒绝的页面。
如评论中所述,我的 ROOT_URL 有问题,留下了尾部斜杠。去掉之后好多了。
我有一个 meteor/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 link 时,我被重定向到连接平台。我连接并被发送回我的 localhost:3000/connected => 一切正常
- 当我在生产环境中执行完全相同的流程时,我在第一次尝试登录后收到拒绝访问(空白页面,仅写入拒绝访问)。如果我然后手动返回 /connect link 我将直接连接(我想我正确地获得了令牌并且可以再次连接)
我不知道为什么两种环境下的行为不同,以及为什么我在生产环境中收到访问被拒绝的页面。
如评论中所述,我的 ROOT_URL 有问题,留下了尾部斜杠。去掉之后好多了。