Аутентификация билетов в автобане. js - PullRequest
0 голосов
/ 07 января 2020

Я реализовал роутер и издатель. Клиент должен подключиться к маршрутизатору с помощью проверки подлинности на основе билетов. Нужен формат отправки токена в методе onchallange.

Ниже приведен мой код js.

var connection = new autobahn.Connection({
    url: 'ws://127.0.0.1:26429/',
    realm: 'testRealm',
    authmethods: ["ticket"],
    authid: 'testAuthid',
    onchallenge: function () {
        // Code to send token in the expected format
    }
});

На стороне маршрутизатора ниже приведены значения, которые я пытаюсь аутентифицировать:

 private readonly IDictionary<string, string> mUserToTicket =
            new Dictionary<string, string>
            {
                ["joe"] = "magic_secret_1"
            };

Как я могу преобразовать ["joe"] = "magic_secret_1" в токен, ожидаемый маршрутизатором?

Большинство примеров приведены в python и реализуют Различный тип аутентификации.

Пожалуйста, помогите.

Отредактировано

Ниже приведена часть используемой аутентификации на стороне маршрутизатора.

public IWampSessionAuthenticator GetSessionAuthenticator
            (WampPendingClientDetails details,
             IWampSessionAuthenticator transportAuthenticator)
        {
            HelloDetails helloDetails = details.HelloDetails;

            if (helloDetails.AuthenticationMethods?.Contains("ticket") != true)
            {
                throw new WampAuthenticationException("supports only 'ticket' authentication");
            }

            string user = helloDetails.AuthenticationId;

            string ticket;

            if (user == null ||
                !mUserToTicket.TryGetValue(user, out ticket))
            {
                throw new WampAuthenticationException
                    ($"no user with authid '{user}' in user database");
            }

            return new TicketSessionAuthenticator(user, ticket, mUserToAuthorizer[user]);
        }

1 Ответ

0 голосов
/ 07 января 2020

Так как вы создаете свой собственный маршрутизатор, вам нужно будет создать logi c для обработки аутентификации WAMP.

В вашем примере заявка "magic_secret_1" - это то, что отправит клиент к маршрутизатору, и маршрутизатор проверит.

В вашем маршрутизаторе необходимо добавить код для обработки сообщений HELLO и AUTHENTICATE. Грубая логика c для каждого:

handle HELLO

Проверка того, что имя пользователя разрешено в области.

Проверка authmethods массив содержит ticket.

Ответ сообщением CHALLENGE: [4, "ticket", {}]

handle AUTHENTICATE

Клиент отправит сообщение типа [5, "magic_secret_1", {}]. Извлеките authid, связанный с сеансом Wamp (маршрутизатор должен был сохранить это при обработке сообщения HELLO), и передать realm, authid и ticket в функцию, которая проверяет содержимое словаря mUserToTicket.

Клиент

На стороне клиента вы можете добавить билет следующим образом:

var connection = new autobahn.Connection({
    url: 'ws://127.0.0.1:26429/',
    realm: 'testRealm',
    authmethods: ["ticket"],
    authid: 'joe',
    onchallenge: function () {
        return "magic_secret_1";
    }
});

Аутентификация на основе билетов WAMP

...