7

nodeJS で connect-keycloak ミドルウェアを使用する際に問題が発生しました。これを使用した人によるオンラインのドキュメントはほとんどないようです。これは、次の公式ドキュメントの「完全な例」に基づいています: http://keycloak.github.io/keycloak-nodejs/connect/

curl でテストすると、未定義の「keycloak-token」に関連する予期しないエラーが発生します。私のコードまたはソースでこれへの参照が見つかりません。オンラインで同じ問題を抱えている人もいません。誰かが私が間違っていることを見ることができますか?

connect-keycloak オブジェクトが含まれ、期待どおりにインスタンス化されます。

// app.js:
// module dependencies
var request = require('sync-request');
var fs = require('fs');
var restify = require('restify');
var Keycloak = require('connect-keycloak');
var session = require('express-session');
var memoryStore = new session.MemoryStore();

// Keycloak
var keycloak = new Keycloak({ store: memoryStore });

そして、ミドルウェアが使用されます:

var server = restify.createServer({
    name: 'name',
    version: '1.0.0'
});

server.use(restify.acceptParser(server.acceptable));
server.use(restify.queryParser());
server.use(restify.bodyParser());
server.use(keycloak.middleware({ logout: '/logout', admin: '/' }));

server.use(session({
    secret: 'secret',
    resave: false,
    saveUninitialized: true,
    store: memoryStore
}));

そして、keycloak.protect メソッドが用意されています。

server.get(/.*/, keycloak.protect(), restify.serveStatic({
    'directory': './html',
    'default': 'index.html'
}));

それでも、このカールテスト:

curl -H "Content-Type: application/json" -X POST -d '{"query":"test"}' http://localhost:3000/trust-me-on-the-url-being-correct/thanks -i

この異常なエラーが発生します (私が望んでいたエラーではありません):

 POST -d '{"query":"car"}' http://localhost:3000/rest/keywords -i
HTTP/1.1 500 Internal Server Error
Content-Type: application/json
Content-Length: 87
Date: Thu, 03 Dec 2015 02:05:40 GMT
Connection: keep-alive

{"code":"InternalError","message":"Cannot read property 'keycloak-token' of undefined"}[addamnilemartin@localhost keyword]$ 

Keycloak.json は app.js と同じディレクトリに含まれており、問題の原因にはなりません。

アップデート:

これが欠けていることに気づき、追加しました:

// set session for keycloak
server.use(session({
    secret: 'fsd78d7gdfgds',
    resave: false,
    saveUninitialized: true,
    store: memoryStore
}));

POST に keycloak.protect() エラーがあったときの応答は次のとおりです。

curl -H "Content-Type: application/json" -X POST -d '{"query":"car"}' http://localhost:3000/blah/blah -i
curl: (52) Empty reply from server

もちろん、keycloak.protect がなければ、認証の試行がないため、応答は予期される JSON になります。

4

1 に答える 1