Keyloak会话-当我将它们从管理页面断开时,它们仍然有效 [英] Keycloak sessions - when I disconnect them from the admin page, they still work

查看:0
本文介绍了Keyloak会话-当我将它们从管理页面断开时,它们仍然有效的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个密钥遮盖域,其中一些用户是NodeJS+TypeScrip项目的IdP。

我目前有这两个会话,如图所示:

如果我按"全部注销"按钮,它们将从此处消失,但它们仍然有效。

示例:

1) I create a new session. I get its JWT token as a response
2) I do a GET req on one of the protected routes with the token attached. It works.
4) I logout all sessions by pressing the button in that photo
5) I do the same GET req on the same protected route. It still works.
 I expect it NOT to work, because I previously logged out all sessions.

这是我的密钥罩配置

import express, {Application} from 'express';
import { Keycloak as KeycloakType } from "keycloak-connect";

var session = require('express-session');
var Keycloak = require('keycloak-connect');

let _keycloak: KeycloakType;

var memoryStore = new session.MemoryStore();

let kcConfig = {
    clientId: 'restapi',
    bearerOnly: true,
    serverUrl: 'http://localhost:8080/auth',
    realm: 'supercatalog',
    realmPublicKey: 'deleted'
};

function getKeycloak() {
    if (_keycloak) {
        return _keycloak;
    } 
    console.log("Initializing Keycloak...");
    _keycloak = new Keycloak({ store: memoryStore }, kcConfig);
    return _keycloak;
}

export {getKeycloak, memoryStore};

我的受保护路由

router.get('/', keycloak.protect(), async (req:Request, res:Response):Promise<void> => {
    var bearerToken: string = await (await keycloak.getGrant(req, res)).toString() as string;
    var decoded: any = jwtDecode(bearerToken);
    console.log(decoded.resource_access.restapi.roles);
    res.send("hello");
});

我是否误解了令牌流?

推荐答案

一般来说,会话独立于JWT。JWTs的优点(和缺点)是,应用程序可以只使用发行者的公钥来加密验证它们,公钥可以是预先粉碎的,也可以是动态查找和缓存的。JWT是self-encoded access token的一个例子,这意味着您无需不断回调中央身份验证/授权服务即可对其进行验证。这使得它们非常适合于分布式系统和零信任体系结构中的身份验证,在这种体系结构中,如果您可以信任颁发者公钥,您就可以验证和信任提供的JWT。

这也有不利的一面。JWT包括一个过期时间,在此时间之前,应用程序将认为它是有效的。如前所述,JWT的使用者,如REST API,不需要与发布服务对话来验证它。

因此,在您的特定情况下,您的应用程序会看到一个JWT,对其进行加密验证,并验证它是否尚未过期,从而接受它。

使用JWT的系统的去中心化本质意味着通常不会撤销JWT本身。这是因为它需要维护一个吊销列表,而您必须有一个中央服务来做到这一点。这并不是说这在技术上是不可能的,但这样做一开始就失去了使用JWTs的大部分好处。

由于会话是独立于JWT进行管理的,因此您可以使会话无效,而为其发出的JWT仍然有效。如果您需要有效的会话,那么您必须独立于基于JWT的身份验证来强制执行该会话。

这篇关于Keyloak会话-当我将它们从管理页面断开时,它们仍然有效的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆