1

无法https://www.npmjs.com/package/keycloak-connect使用代理。不过,我可以从浏览器和 curl 使用相同的代理访问 Keycloak 服务器。

我尝试过的唯一有希望的事情是:

app.set('trust proxy', 'loopback');

......它没有工作。

如果我在自己的 WiFi(无代理)上使用它,我可以通过 keycloak-connect 进行连接。使用代理时出现的错误是:

Could not obtain grant code: Error: connect ETIMEDOUT 108.128.***.168:443

108.128.***.168是 Keycloak 服务器的 IP。

我无法验证是否存在允许我将 keycloak-connect 与代理一起使用的配置。

附上几行与 keycloak 相关的代码:

const Keycloak = require('keycloak-connect');
const memoryStore = new session.MemoryStore();

const keycloakConfig = {
  clientId: process.env.CLIENT_ID,
  'auth-server-url': process.env.SERVER_URL,
  'confidential-port': 0,
  'policy-enforcer': {},
  'ssl-required': 'external',
  'verify-token-audience': true,
  realm: process.env.REALM,
  credentials: {
    'secret': process.env.CLIENT_SECRET
  },
  realmPublicKey: process.env.REALM_PUBLIC_KEY
};

const keycloak = new Keycloak({
  store: memoryStore
}, keycloakConfig);

const MongoStore = mongoSessionStore(session);

const sess = {
  name: 'ssg-next.sid',
  secret: sessionSecret,
  store: new MongoStore({
    mongooseConnection: mongoose.connection,
    ttl: 14 * 24 * 60 * 60
  }),
  resave: false,
  saveUninitialized: false,
  cookie: {
    httpOnly: true,
    maxAge: 14 * 24 * 60 * 60 * 1000
  }
};

if (!dev) {
  server.set('trust proxy', 'loopback'); // trust first proxy
  sess.cookie.secure = true; // serve secure cookies
}

server.use(keycloak.middleware({
  logout: '/logout'
}));

4

1 回答 1

0

你不需要app.set("trust proxy")但是app.enable("trust proxy")

我自己偶然发现了这个,看到了一个关于它的问题。我目前在“信任代理”后面没有任何其他东西,如示例中所示 - 在入口控制器后面运行我的应用程序,但这基本上解决了我使用 Keycloak 的协议问题。

于 2021-11-30T13:34:06.613 回答