Keycloak中间件Nodejs应用程序使用有效令牌重定向

时间:2019-12-09 14:30:35

标签: node.js express microservices keycloak k3s

我有一个k3,上面有一个密钥斗篷和一个处理帖子的微服务。 微服务是在NodeJS中使用express和lib keycloak-connect开发的:

Keycloak实例:

import Keycloak from 'keycloak-connect';

export class KeycloakMiddleware {

    private static keycloak: Keycloak;

    private static init(): void {
        KeycloakMiddleware.keycloak = new Keycloak({});
    }

    public static getInstance(): Keycloak {
        if (!KeycloakMiddleware.keycloak) {
            KeycloakMiddleware.init();
        }

        return KeycloakMiddleware.keycloak;
    }

}

服务器:

import express from 'express';

const app = express();
const keycloak = KeycloakMiddleware.getInstance();
app.use(keycloak.middleware());
app.use('/posts', BaseRouter);

路线:

import { Router } from 'express';
import PostRouter from './Posts';
import ReactionRouter from './Reactions';
import {KeycloakMiddleware} from '../shared/Keycloak';

const router = Router();
const keycloak = KeycloakMiddleware.getInstance();
router.use('', keycloak.protect(), PostRouter);
router.use('/reactions', keycloak.protect(), ReactionRouter);
export default router;

Keycloak配置:

{
  "realm": "master",
  "auth-server-url": "http://url/auth",
  "ssl-required": "none",
  "resource": "client",
  "credentials": {
    "secret": "secret"
  },
  "confidential-port": 0
}

我通过Postman进行所有HTTP请求

我通过对http://url/auth/realms/master/protocol/openid-connect/token进行POST请求从密钥斗篷获得令牌。

然后将其插入标头Authorization:Bearer [token] abd中,然后在http://localhost:3000/posts上执行GET请求,此方法可以正常工作,并且还给我我期望的结果。

但是,当我使用完全相同的令牌调用已部署的API时,它会将我重定向到密钥斗篷域的登录页面。

为什么我部署的API在本地时不接受令牌?

0 个答案:

没有答案