Cosmos-gui 应用程序在使用 keystone 进行身份验证后崩溃
Cosmos-gui application crashes after authentication with keystone
我有问题。尝试使用 keystone 授权后,我的 cosmos gui 应用程序崩溃了。
Horizon 应用程序在 https://192.168.4.33:443 上 运行,
而 cosmos-gui 在 http://192.168.4.180:81 上 运行。
我的 gui 配置文件如下所示:
"oauth2": {
"idmURL": "https://192.168.4.33",
"client_id": "***********************************",
"client_secret": "*********************************",
"callbackURL": "http://192.168.4.180:81/auth",
"response_type": "code"
},
and inside horizon 我注册了应用Cosmos Big data
带参数:
Description
Cosmos Big data
URL
https://192.168.4.33
Callback URL
http://192.168.4.180:81/auth
所以之后我启动 cosmos-gui 应用程序并在点击登录后将我重定向到这个 url:
https://192.168.4.33/oauth2/authorize/?response_type=code&client_id=0434fdf60897479588c3c31cfc957b6d&state=xyz&redirect_uri=http://192.168.4.180:81/auth
那就是 ok.But 然后,当我点击按钮授权时,它会引导我到这个 url:
http://192.168.4.180:81/auth?state=xyz&code=NVfyZUov1KuQ8yTw498oItHgYC2l9Z
在那一刻,cosmos-gui 应用程序崩溃了,我从日志中得到的一切都是这样的:
/home/cosmos-gui/fiware-cosmos/cosmos-gui/src/app.js:138
req.session.access_token = results.access_token;
^
TypeError: Cannot read property 'access_token' of undefined
at /home/cosmos-gui/fiware-cosmos/cosmos-gui/src/app.js:138:43
at /home/cosmos-gui/fiware-cosmos/cosmos-gui/src/oauth2.js:168:22
at ClientRequest.<anonymous> (/home/cosmos-gui/fiware-cosmos/cosmos- gui/src/oauth2.js:140:9)
at ClientRequest.emit (events.js:95:17)
at CleartextStream.socketErrorListener (http.js:1548:9)
at CleartextStream.emit (events.js:95:17)
at SecurePair.<anonymous> (tls.js:1400:19)
at SecurePair.emit (events.js:92:17)
at SecurePair.maybeInitFinished (tls.js:980:10)
at CleartextStream.read [as _read] (tls.js:472:13)
在 keystone 方面,一切看起来 ok.This 来自 keystones 日志:
2015-08-24 16:34:02.604 27693 INFO keystone.contrib.oauth2.controllers [-] OAUTH2: Created Authorization Code to consumer 0434fdf60897479588c3c31cfc957b6d for user idm with scope [u'all_info']. Redirecting to http://192.168.4.180:81/auth?state=xyz&code=NVfyZUov1KuQ8yTw498oItHgYC2l9Z
2015-08-24 16:34:02.606 27693 INFO eventlet.wsgi.server [-] 127.0.0.1 - - [24/Aug/2015 16:34:02] "POST /v3/OS-OAUTH2/authorize HTTP/1.1" 302 208 0.121336
经过一些调试和打印进入 app.get('/auth', function(req, res)
我发现了这个错误:DEPTH_ZERO_SELF_SIGNED_CERT
它似乎不认为自签名证书有效。
无论如何作为文件中的第一行:
cosmos-gui/src/app.js
我添加了
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
现在可以正常使用了。
当你在Keystone中授权Cosmos应用时,回调URL被调用并执行这段软件:
// Handles requests from IDM with the access code
app.get('/auth', function(req, res) {
// Using the access code goes again to the IDM to obtain the access_token
oa.getOAuthAccessToken(req.query.code, function (e, results){
// Stores the access_token in a session cookie
req.session.access_token = results.access_token;
res.redirect('/');
});
});
即Keystone 使用可用于检索最终访问令牌(硬安全元素)的访问代码(软安全部分)调用回调。
您的 Keystone 似乎正在生成访问代码,但在被要求时没有返回访问令牌。您可以检查 Keystone 日志以找到访问令牌请求吗?您可以打印此调用返回的任何错误吗?
oa.getOAuthAccessToken(req.query.code, function (e, results)
我有问题。尝试使用 keystone 授权后,我的 cosmos gui 应用程序崩溃了。 Horizon 应用程序在 https://192.168.4.33:443 上 运行, 而 cosmos-gui 在 http://192.168.4.180:81 上 运行。 我的 gui 配置文件如下所示:
"oauth2": {
"idmURL": "https://192.168.4.33",
"client_id": "***********************************",
"client_secret": "*********************************",
"callbackURL": "http://192.168.4.180:81/auth",
"response_type": "code"
},
and inside horizon 我注册了应用Cosmos Big data 带参数:
Description
Cosmos Big data
URL
https://192.168.4.33
Callback URL
http://192.168.4.180:81/auth
所以之后我启动 cosmos-gui 应用程序并在点击登录后将我重定向到这个 url:
https://192.168.4.33/oauth2/authorize/?response_type=code&client_id=0434fdf60897479588c3c31cfc957b6d&state=xyz&redirect_uri=http://192.168.4.180:81/auth
那就是 ok.But 然后,当我点击按钮授权时,它会引导我到这个 url:
http://192.168.4.180:81/auth?state=xyz&code=NVfyZUov1KuQ8yTw498oItHgYC2l9Z
在那一刻,cosmos-gui 应用程序崩溃了,我从日志中得到的一切都是这样的:
/home/cosmos-gui/fiware-cosmos/cosmos-gui/src/app.js:138
req.session.access_token = results.access_token;
^
TypeError: Cannot read property 'access_token' of undefined
at /home/cosmos-gui/fiware-cosmos/cosmos-gui/src/app.js:138:43
at /home/cosmos-gui/fiware-cosmos/cosmos-gui/src/oauth2.js:168:22
at ClientRequest.<anonymous> (/home/cosmos-gui/fiware-cosmos/cosmos- gui/src/oauth2.js:140:9)
at ClientRequest.emit (events.js:95:17)
at CleartextStream.socketErrorListener (http.js:1548:9)
at CleartextStream.emit (events.js:95:17)
at SecurePair.<anonymous> (tls.js:1400:19)
at SecurePair.emit (events.js:92:17)
at SecurePair.maybeInitFinished (tls.js:980:10)
at CleartextStream.read [as _read] (tls.js:472:13)
在 keystone 方面,一切看起来 ok.This 来自 keystones 日志:
2015-08-24 16:34:02.604 27693 INFO keystone.contrib.oauth2.controllers [-] OAUTH2: Created Authorization Code to consumer 0434fdf60897479588c3c31cfc957b6d for user idm with scope [u'all_info']. Redirecting to http://192.168.4.180:81/auth?state=xyz&code=NVfyZUov1KuQ8yTw498oItHgYC2l9Z
2015-08-24 16:34:02.606 27693 INFO eventlet.wsgi.server [-] 127.0.0.1 - - [24/Aug/2015 16:34:02] "POST /v3/OS-OAUTH2/authorize HTTP/1.1" 302 208 0.121336
经过一些调试和打印进入 app.get('/auth', function(req, res)
我发现了这个错误:DEPTH_ZERO_SELF_SIGNED_CERT
它似乎不认为自签名证书有效。 无论如何作为文件中的第一行:
cosmos-gui/src/app.js 我添加了
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
现在可以正常使用了。
当你在Keystone中授权Cosmos应用时,回调URL被调用并执行这段软件:
// Handles requests from IDM with the access code
app.get('/auth', function(req, res) {
// Using the access code goes again to the IDM to obtain the access_token
oa.getOAuthAccessToken(req.query.code, function (e, results){
// Stores the access_token in a session cookie
req.session.access_token = results.access_token;
res.redirect('/');
});
});
即Keystone 使用可用于检索最终访问令牌(硬安全元素)的访问代码(软安全部分)调用回调。
您的 Keystone 似乎正在生成访问代码,但在被要求时没有返回访问令牌。您可以检查 Keystone 日志以找到访问令牌请求吗?您可以打印此调用返回的任何错误吗?
oa.getOAuthAccessToken(req.query.code, function (e, results)