2

私はこれを機能させるためにサークルを回っています...

状況は次のとおりです。

Thruwayを使用してCrossbar.ioルーター経由で複数のマイクロサービスにリモート プロシージャ コール (RPC) を行う PHP Web アプリがあります。匿名通話は完全に機能していますが、認証を追加したいと考えています。

クロスバーの構成は次のとおりです。

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

クロスバー サーバーは、ルーターとしてのみセットアップされていることを願っています。すべてのクライアント/ワーカーは他のサーバー上にあります。クロスバー構成、具体的にはこの構成ファイルのこの例に従っています。サンプルと私の構成の間にはいくつかの重要な違いがあります: サンプル サーバーはルーターとして構成され、静的な Web ページも提供します (私のものではありません)。サンプル サーバーには Python コンポーネントが含まれています (私が読んでいる場合)正しく) 認証プロセスにとって重要ではありません。

私の開発環境では、1 つのクライアントに対して認証を機能させようとしています。クライアントコードは次のとおりです。

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

サーバーがクライアントに挑戦するために必要な追加構成を誰か説明できますか?

4

1 に答える 1

4

見つけた...

今日見たすべての例で、これを見落としていたに違いありません。$client->setAuthId('client1');解決策は、への呼び出しの前に追加することです$client->addClientAuthenticator($auth);

于 2015-07-07T21:42:19.123 に答える