2015-07-07 8 views
2

я ходить кругами, пытаясь получить эту работу ...Как настроить аутентификацию WAMP от клиента Thruway на кросс-бар?

Вот ситуация:

У меня есть веб-приложение PHP, который делает удаленные вызовы процедур (RPC) к нескольким microservices через 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" 
       } 
       } 
      } 
      } 
     } 
     ] 
    } 
    ] 
} 

Сервер Перекладина (я надеюсь) установить, как только маршрутизатор. Все клиенты/рабочие находятся на других серверах. Я придерживался 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(); 

Проблема в том, что сообщение «challenge» никогда не отправляется сервером. Когда клиент пытается соединиться, я получаю следующее сообщение отладки:

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"] 

Может кто-нибудь объяснить, какие дополнительные настройки мне нужно сделать, чтобы получить сервер, чтобы бросить вызов клиента?

ответ

3

Я нашел его ...

Должно быть, я не заметил этого во всех примерах, которые я видел сегодня. Решение состоит в том, чтобы добавить $client->setAuthId('client1'); перед вызовом $client->addClientAuthenticator($auth);

+1

Вы можете увидеть полный рабочий пример этого здесь: https://github.com/crossbario/crossbarexamples/tree/master/authenticate/wampcradynamic/php – daviddan

+0

Вы должны принять ваш собственный ответ, чтобы отметить этот вопрос. – gzost