Dart: аутентификация Websocket Bearer для клиента - PullRequest
0 голосов
/ 29 апреля 2018

Я использую платформу Aqueduct на стороне сервера Dart. Моя программа использует их авторизацию OAuth 2.0 Bearer для защиты определенных маршрутов. Это отлично работает. Однако у меня возникает проблема, когда я пытаюсь установить соединение через веб-сокет по безопасному маршруту. Это код:

router
  .route("/connect")
  .pipe(new Authorizer(authServer));
  .listen((request) async {
    var userID = request.authorization.resourceOwnerIdentifier;
    var socket = await WebSocketTransformer.upgrade(request.innerRequest);
    socket.listen((event) => handleEvent(event, fromUserID: userID));

    connections[userID] = socket;

    return null;
  });

Этот код взят непосредственно с сайта Акведук: https://aqueduct.io/docs/http/websockets/.

Мой вопрос: как должен клиент искать это? В частности, как мне установить авторизацию в заголовке HTTP при установлении соединения через веб-сокет. Я пробовал много разных вещей, включая следующие:

void connect()
{
    _address = "ws://$ip:$port/connect";
    _webSocket = new WebSocket(_address, {"Authorization":"Bearer ks123..."});
}

И

void connect()
{
    _address = "ws://$ip:$port/connect&access_token=ks123...";
    _webSocket = new WebSocket(_address);
}

И

void connect()
{
    _address = "ws://$ip:$port/connect&Authorization=Bearer ks123...";
    _webSocket = new WebSocket(_address);
}

И

void connect()
{
    _address = "ws://$ip:$port/connect";
    _webSocket = new WebSocket(_address, ["Authorization Bearer ks123.."]);
}

Кто-нибудь знает, как решить эту проблему?

...