Node.js keycloak-nodejs-connect适配器(版本4.3)在应用程序网关中用于根据docs保护微服务的端点:
var session = require('express-session');
var Keycloak = require('keycloak-connect');
var memoryStore = new session.MemoryStore();
var keycloak = new Keycloak({ store: memoryStore });
但是,在用户登录/注销流程之后,源自cookie的connect.sid
express-session仍存储在浏览器中。如果其他用户随后通过相同的浏览器登录,则会导致意外的问题。
如何正确清除connect.sid
快速会话cookie?
通过将response.clearCookie('connect.sid', { path: '/' });
添加到unstore
函数来覆盖adapter's session store code很有帮助。但是,它似乎太复杂了:
var SessionStore = require('keycloak-connect/stores/session-store');
let store = (grant) => {
return (request, response) => {
request.session[SessionStore.TOKEN_KEY] = grant.__raw;
};
};
let unstore = (request, response) => {
delete request.session[SessionStore.TOKEN_KEY];
response.clearCookie('connect.sid', { path: '/' });
};
SessionStore.prototype.wrap = (grant) => {
if (grant) {
grant.store = store(grant);
grant.unstore = unstore;
}
};
某些keycloak适配器或express-session配置是否更好地实现了目标?
答案 0 :(得分:0)
您的想法是正确的,但是我不确定重写Keycloak的unstore
方法是最好的方法(如果升级Keycloak或要使用{{1} }删除授权,但保留会话的其余部分。
更好的方法是创建一个新的中间件,该中间件会在您的登出路径上触发:
unstoreGrant