Rav*_*apu 9 node.js express openid-connect keycloak
我正在使用KeyCloak为虚拟节点应用程序设置Open Id connect .我正在使用key cloak docs中建议的nodejs适配器.
这是节点应用程序的routes.js文件:
'use strict';
/**
* Module dependencies.
*/
const home = require('../app/controllers/home');
/**
* Expose
*/
module.exports = function (app, passport) {
var session = require('express-session');
var Keycloak = require('keycloak-connect');
var memoryStore = new session.MemoryStore();
var keycloak = new Keycloak({ store: memoryStore })
// app.use(session({
// secret: 'mySecret',
// resave: false,
// saveUninitialized: true,
// store: memoryStore
// }));
app.use( keycloak.middleware() );
// console.log("In Routes.js. Compare with post auth message");
app.get('/', keycloak.protect(), home.index);
// app.get('/redirect', keycloak.protect(), home.index);
// app.get('/venky', keycloak.protect(), function(request, response) {
// response.send("Hello World");
// });
app.get('/redirecta', home.index);
/**
* Error handling
*/
app.use(function (err, req, res, next) {
// treat as 404
if (err.message
&& (~err.message.indexOf('not found')
|| (~err.message.indexOf('Cast to ObjectId failed')))) {
return next();
}
console.error(err.stack);
// error page
res.status(500).render('500', { error: err.stack });
});
// assume 404 since no middleware responded
app.use(function (req, res, next) {
res.status(404).render('404', {
url: req.originalUrl,
error: 'Not found'
});
});
};
Run Code Online (Sandbox Code Playgroud)
当我访问根URL时localhost:3000,我最初会被重定向到登录页面KeyCloak.登录后,我收到以下错误:
正如您所看到的,它将进入无限循环.
我发现的其他细节:
在第一次重定向中,登录后,该state值与登录前的值相同.从上面的服务器日志屏幕截图中可以看到,state此后每次重定向的值都会发生变化.
从我到目前为止所知,重定向正在post-auth.js (line number 49)导致无限循环.这是一个链接post-auth.js- https://github.com/keycloak/keycloak-nodejs-connect/blob/master/middleware/post-auth.js
sessionId在getGrantFromCode功能index.js 是不确定的.这是功能:
Keycloak.prototype.getGrantFromCode = function (code, request, response) {
if (this.stores.length < 2) {
// bearer-only, cannot do this;
throw new Error('Cannot exchange code for grant in bearer-only mode');
}
var sessionId = request.session.id;
// console.log(sessionId, "BBB BEGIN NNNN - in index.js getGrantFromCode");
// console.log(request, "sessionId from getGrantFromCode function");
// console.log("EEE END DDD - in index.js getGrantFromCode");
var self = this;
return this.grantManager.obtainFromCode(request, code, sessionId)
.then(function (grant) {
self.storeGrant(grant, request, response);
// console.log(grant, "iS this the grant from getGrantFromCode?");
// console.log("Inside the return function of getGrantFromCode");
return grant;
});
};
Run Code Online (Sandbox Code Playgroud)
链接到源代码:https://github.com/keycloak/keycloak-nodejs-connect/blob/master/index.js
问题:
mvn -f testsuite/integration/pom.xml exec:java -Pkeycloak-server用来运行keycloak.我之前从未使用过java.非常感谢提前.
要使代码正常工作,您需要取消注释会话初始化:
// app.use(session({
// secret: 'mySecret',
// resave: false,
// saveUninitialized: true,
// store: memoryStore
// }));
Run Code Online (Sandbox Code Playgroud)由于您没有 java 经验,我建议使用docker 镜像作为 keycloak
docker run -e KEYCLOAK_LOGLEVEL=DEBUG --name keycloak -p 8080:8080 jboss/keycloak
Run Code Online (Sandbox Code Playgroud)之后,您可以访问在端口8080上运行的keycloak,并且在控制台中您将看到keycloak日志
| 归档时间: |
|
| 查看次数: |
847 次 |
| 最近记录: |