【发布时间】:2020-06-05 04:01:05
【问题描述】:
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 });
但是,在用户登录/注销流程之后,源自express-session 的connect.sid cookie 仍存储在浏览器中。如果其他用户之后通过同一浏览器登录,则会导致意外问题。
如何正确清除connect.sid express-session 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 配置是否能更好地实现目标?
【问题讨论】:
-
您遇到了什么样的问题?在 /logoff 之后 cookie 仍然存储在浏览器中的事实应该没什么大不了的。如果服务器已删除该 cookie 的会话。在下一个请求中,Keycloak 应该将您的新用户发送到登录页面,然后刷新 cookie。
-
你也在用前端keycloak.js吗?还是整个身份验证/授权仅由后端完成?
-
整个认证/授权仅由后端完成,ui依赖后端
-
问题是cookie
'connect.sid'注销后没有删除 -
当请求带有旧 cookie 时会发生什么?负责检查会话的逻辑应将其标记为错误的 cookie,并且应启动新的登录过程。
标签: node.js keycloak express-session keycloak-nodejs-connect keycloak-connect