Как настроить аутентификацию WAMP от клиента Thruway до маршрутизатора Crossbar?
Я хожу по кругу, пытаясь заставить это работать...
Вот ситуация:
У меня есть веб-приложение PHP, которое выполняет удаленные вызовы процедур (RPC) для нескольких микросервисов через маршрутизатор http://crossbar.io/, используя Thruway. Анонимные звонки работают отлично, но теперь я хочу добавить аутентификацию.
Вот конфигурация Перекладины:
{
"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 - в частности, этот файл конфигурации. Есть несколько важных различий между примером и моим конфигом: пример сервера настроен как маршрутизатор и также обслуживает статические веб-страницы (а мой нет), а сервер примера включает компонент 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();
Проблема в том, что сообщение "вызов" никогда не отправляется сервером. Когда клиент пытается подключиться, я получаю следующее сообщение отладки:
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"]
Может кто-нибудь объяснить, какие дополнительные настройки мне нужно сделать, чтобы сервер бросил вызов клиенту?
1 ответ
Я нашел это...
Должно быть, я не заметил этого во всех примерах, которые видел сегодня. Решение состоит в том, чтобы добавить $client->setAuthId('client1');
до звонка $client->addClientAuthenticator($auth);