Autobahn.js 中的票证验证

Ticket authentication in Autobahn.js

我已经实现了路由器和发布者。客户端需要使用基于票证的身份验证连接到路由器。需要在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]);
        }

由于您要构建自己的路由器,因此您需要构建逻辑 处理 WAMP 身份验证。

在你的例子中,ticket 是 "magic_secret_1",这是客户端发送给路由器的,路由器会检查。

在您的路由器中,您需要添加代码来处理 HELLO 和 AUTHENTICATE 消息。每个的粗略逻辑是:

处理你好

检查域中是否允许用户名。

检查 authmethods 数组包含 ticket

回复挑战消息:[4, "ticket", {}]

处理验证

客户端会发送类似[5, "magic_secret_1", {}]的消息。获取 authid 与 wamp 会话关联(路由器在处理 HELLO 消息时应该存储它)并将 realmauthidticket 传递给检查内部的函数你的 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 Ticket-based Authentication