我试图让这个开始工作......
以下是这种情况:
我有一个PHP Web应用程序,它使用Crossbar.io通过Thruway路由器对多个微服务进行远程过程调用(RPC)。匿名调用工作正常,但现在我想添加身份验证。
以下是Crossbar配置:
{
"controller": {
},
"workers": [
{
"type": "router",
"realms": [
{
"name": "dashboard",
"roles": [
{
"name": "microservice",
"permissions": [
{
"uri": "*",
"publish": true,
"subscribe": true,
"call": true,
"register": true
}
]
}
]
}
],
"transports": [
{
"type": "websocket",
"endpoint": {
"type": "tcp",
"port": 80
},
"auth": {
"wampcra": {
"type": "static",
"users": {
"client1": {
"secret": "secret1",
"role": "microservice"
}
}
}
}
}
]
}
]
}
Crossbar服务器(我希望)仅设置为路由器。所有客户/工作人员都在其他服务器上。我一直在关注Crossbar配置this example - 具体来说,this configuration file。示例和我的配置之间存在一些重要的区别:示例服务器既配置为路由器又配置静态网页(我的配置不是),示例服务器包含一个Python组件(如果我'正确读取它对认证过程不重要。
在我的开发环境中,我试图让身份验证为一个客户端工作。这是客户端代码:
<?php
// include the autoloader
//
require __DIR__ . '/vendor/autoload.php';
use Thruway\ClientSession;
use Thruway\Peer\Client;
use Thruway\Transport\PawlTransportProvider;
use Thruway\Authentication\ClientWampCraAuthenticator;
// create the WAMP client
//
$client = new Client('dashboard');
$auth = new ClientWampCraAuthenticator("client1", "secret1");
$client->addClientAuthenticator($auth);
// add the WAMP transport provider
//
$client->addTransportProvider(
new PawlTransportProvider('ws://192.168.1.10/')
);
// handle the "open" (connect) event
//
$client->on('open', function (ClientSession $session) {
// register the getImageData procedure
//
$session->register('service.client1.get', function ($data) {
return (new Client)->get();
});
});
// start the client
//
$client->start();
问题是&#34;挑战&#34;消息永远不会由服务器发送。当客户端尝试连接时,我收到以下调试消息:
2015-07-07T13:58:17.7451860 debug [Thruway\Transport\PawlTransportProvider 204] Received: [3,{"message":"no user with authid 'anonymous' in user database"},"wamp.error.not_authorized"]
有人可以解释我需要做些什么其他配置才能让服务器挑战客户端吗?
答案 0 :(得分:3)
我发现了......
在我今天看到的所有例子中,我一定忽略了这一点。解决方案是在调用$client->setAuthId('client1');
$client->addClientAuthenticator($auth);