2016-12-07 3 views
0

Я пытаюсь сделать RPC вызов к серверу deepstream, который требует проверки подлинности, вот конфиг:RPC без аутентификации

#Authentication 
auth: 
    type: http 
    options: 
     endpointUrl: http://localhost:3000/auth-user 
     permittedStatusCodes: [ 200 ] 
     requestTimeout: 500 

А вот разрешение:

rpc: 
    "*": 
     provide: true 
     request: true 

Аутентификация работает нормально. Но когда я пытаюсь сделать вызов RPC перед вызовом

client.login() 

я получаю эту ошибку: ACK_TIMEOUT, и глядя на WebSocket кадры не кажется, что кадры/данные отправляются на сервер, является существует ли какая-либо проверка на стороне клиента, запрещающая любое взаимодействие с сервером до входа в систему? Есть ли способ сделать анонимный вызов RPC, а затем сделать логин?

ответ

0

deepstream блокирует все вызовы перед аутентификацией - даже для общедоступных подключений требуется вызвать логин с null или пустые аргументы в первую очередь. Тем не менее, вы могли создать открытого/открытого пользователя, который HTTP-сервер может разрешить для первоначального RPC, а затем немедленно отключить и снова подключиться к соответствующим учетным данным.

+0

Я пробовал логин с нулевым значением, но я получаю INVALID_AUTH_DATA, Должен ли он быть настроен где? (чтобы разрешить анонимный вход и аутентификацию) –

+0

На самом деле вызов login() без аргументов является сервером проверки подлинности HTTP, поэтому я разрешаю логин без учетных данных и применяю некоторые политики ограничения с помощью permissions.yml –

+0

с null вам также необходимо будет предоставить обратный вызов, например '.login (null, (success, errorCode, error) => {})' - все вызовы перенаправляются на сервер http-аутентификации, так как довольно часто вы хотите читать данные подключений, например. cookie из заголовка, а не учетных данных пользователя. Просто убедитесь, что сервер auth позволяет этим вызовам проходить, но сильно ограничивает то, что они могут делать, как вы упомянули выше – wolframhempel

Смежные вопросы