如何设置从Thruway客户端到Crossbar路由器的WAMP身份验证?

时间:2015-07-07 21:02:31

标签: php wamp-protocol crossbar thruway

我试图让这个开始工作......

以下是这种情况:

我有一个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"]

有人可以解释我需要做些什么其他配置才能让服务器挑战客户端吗?

1 个答案:

答案 0 :(得分:3)

我发现了......

在我今天看到的所有例子中,我一定忽略了这一点。解决方案是在调用$client->setAuthId('client1');

之前添加$client->addClientAuthenticator($auth);