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 消息时应该存储它)并将 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";
}
});
我已经实现了路由器和发布者。客户端需要使用基于票证的身份验证连接到路由器。需要在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 消息时应该存储它)并将 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";
}
});