Вот несколько примеров, которые могут быть вам полезны:
https://github.com/crossbario/crossbar-examples/tree/master/authentication
Я думаю, вам нужно использовать метод динамической аутентификации WAMP-Ticket.
Динамическая аутентификация WAMP-Ticket - это простой вызов открытого текста
схема. Клиент соединяется с областью под некоторым authid и запросами
authmethod = тикет. Crossbar.io будет «оспаривать» клиента, спрашивая
за билет. Клиент отправляет билет, и Crossbar.io будет в
включите вызов пользователь внедрил процедуру WAMP для фактического
проверка билета.
Итак, вам нужно создать дополнительный компонент для аутентификации пользователей:
from autobahn.twisted.wamp import ApplicationSession
from autobahn.wamp.exception import ApplicationError
class AuthenticatorSession(ApplicationSession):
@inlineCallbacks
def onJoin(self, details):
def authenticate(realm, authid, details):
ticket = details['ticket']
print("WAMP-Ticket dynamic authenticator invoked: realm='{}', authid='{}', ticket='{}'".format(realm, authid, ticket))
pprint(details)
if authid in PRINCIPALS_DB:
if ticket == PRINCIPALS_DB[authid]['ticket']:
return PRINCIPALS_DB[authid]['role']
else:
raise ApplicationError("com.example.invalid_ticket", "could not authenticate session - invalid ticket '{}' for principal {}".format(ticket, authid))
else:
raise ApplicationError("com.example.no_such_user", "could not authenticate session - no such principal {}".format(authid))
try:
yield self.register(authenticate, 'com.example.authenticate')
print("WAMP-Ticket dynamic authenticator registered!")
except Exception as e:
print("Failed to register dynamic authenticator: {0}".format(e))
и добавьте метод аутентификации в конфигурацию:
"transports": [
{
"type": "web",
"endpoint": {
"type": "tcp",
"port": 8080
},
"paths": {
"ws": {
"type": "websocket",
"serializers": [
"json"
],
"auth": {
"ticket": {
"type": "dynamic",
"authenticator": "com.example.authenticate"
}
}
}
}
}
]