Как настроить аутентификацию WAMP с клиента Thruway на маршрутизатор Crossbar?

Я хожу по кругу, пытаясь заставить это работать...

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

У меня есть веб-приложение PHP, которое выполняет удаленные вызовы процедур (RPC) для нескольких микросервисов через маршрутизатор 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, в частности, < href="https://github.com/crossbario/crossbarexamples/blob/master/authenticate/wampcra/.crossbar/config.json" rel="nofollow">этот файл конфигурации. Между примером и моей конфигурацией есть несколько важных отличий: примерный сервер настроен как маршрутизатор, а также обслуживает статические веб-страницы (чего не делает мой), а примерный сервер включает компонент 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"]

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


person Kryten    schedule 07.07.2015    source источник


Ответы (1)


Я нашел это...

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

person Kryten    schedule 07.07.2015
comment
Вы можете увидеть полный рабочий пример этого здесь: github.com/crossbario /crossbarexamples/tree/master/authenticate/ - person daviddan; 08.07.2015