NodeJS 针对不同端点的密钥伪装重定向

wwodge7n  于 2023-06-22  发布在  Node.js
关注(0)|答案(1)|浏览(113)

我第一次使用nodejs后端设置keycloak,目前我正在努力解决keycloak的重定向问题。对于我的设置,我在docker容器中使用keycloak,openid-client用于我的open id连接,passport和express. session。正如我已经说过的,我也在使用nodejs后端。
所以我有不同的端点,比如“localhost:8000/API/endpoint 1”或“localhost:8000/api/endpoint 2”。其中一些端点应该受到保护,因此只有具有特定角色的用户才能看到它们,出于测试目的,我目前只查看用户是否登录。
这是我在Keycloak用户界面中创建的客户端的重定向URI。

在我的后端中,我创建了这样的客户端:

const keycloakClient = new keycloakIssuer.Client({
    client_id: process.env.OPEN_ID_CLIENT_ID,
    client_secret: process.env.OPEN_ID_CLIENT_SECRET,
    redirect_uris: [process.env.OPEN_ID_REDIRECT_URI],
    response_types: ["code"],
  });

我的进程.env.OPEN_ID_REDIRECT_URI看起来像这样:OPEN_ID_REDIRECT_URI =“http://localhost:8000/api/”
因此,我认为这将允许以登录用户的身份访问每个/API/* 端点,但这是错误的。每次我试图在这些端点之一上作为登录用户进行简单的GET请求时,它都会将我重定向到“无法GET /*”URL:(http://localhost:8000/api/?state=...”),所以他附加了state,不让我到达端点。
我这样保护我的路线:app.use(“/API”,passport.authenticate(“oidc”),endpointRoutes);
那么,我需要如何配置重定向URI以进行正确的端点处理呢?
问题似乎出在我的.env文件中
如果我改变redirect_uris到“http://localhost:8000/api/endpoint 1”它的作品,但只有这个端点.如果我试图使用“http://localhost:8000”它不工作

cvxl0en2

cvxl0en21#

确保你的.env文件中的keycloak设置与你在Keycloak上提供的相匹配。因此,设置进程的值。env.OPEN_ID_REDIRECT_URI应该是
http://localhost:8000/api/*
如果您的规则为http://localhost:8000/api/,则您之前提供的URL将不起作用,因为http://localhost:8000/api不是有效的URL
结尾的 * 表示应该允许/API端点的任何子集端点,而不是/api端点本身。如果这是你的意图,那么让你的Keycloak配置和.env重定向URL
http://localhost:8000/

Happy Keycloaking:)

相关问题