Я пытаюсь настроить базовую аутентификацию входа/пароля для репликации p2p.
Репликация отлично работает без аутентификации. Поэтому я уверен, что моя проблема связана с конфигурацией аутентификации.Что такое правильный способ настройки уровня авторизации для CouchbaseLite (CBLListener и CBLReplication) для репликации базы данных p2p?
CBListener
конфигурации:
login = "my_login"
password = "my_password"
listener = CBLListener(manager: CBLManager.sharedInstance(), port: 55555)
listener.setBonjourName(netServiceName, type: netServiceType)
listener.readOnly = true
listener.setPasswords([login : password])
try! listener.start()
CBLReplication
конфигурации:
let netService: NetService = ... // Got from NetServiceBrowserDelegate and NetServiceDelegate
let components = NSURLComponents()
components.scheme = "http"
components.host = netService.hostName
components.port = NSNumber(value: 55555)
components.path = "/" + database.name
components.user = login
components.password = password
let newReplication = database.createPullReplication(components.url!)
newReplication.continuous = true
newReplication.start()
Вот что я получаю в Xcode консоли:
CBLRestPuller [http://my_login: ***** @ Uladzimir-Papkos-iPad.local.:55555/sg_to_firstfoundry_net]: В сети
CBLRestPuller [http://my_login: ***** @ Uladzimir-Papkos-iPad.local.:55555/sg_to_firstfoundry_net]: нет локальной контрольной точки; не получает удаленный один
CBLRestPuller [http://my_login: ***** @ Uladzimir-Papkos-iPad.local.:55555/sg_to_firstfoundry_net] Прогресс: установить активный = 1
CBLReplication [от http://my_login: **** *@Uladzimir-Papkos-iPad.local:. 55555/sg_to_firstfoundry_net]: активный, прогресс = 0/0, ERR: (нуль) ноль
CBLRestPuller [http://my_login: ***** @ Уладзимир-Papkos-IPAD .local.: 55555/sg_to_firstfoundry_net]: Состояние достижимости =: достижимое (20002), приостановлено = 0
: HTTP auth не удалось; отправлено Авторизация: Basic bXlfbG9naW46bXlfcGFzc3dvcmQ =; получил WWW-Authenticate: Дайджест области действия = "CouchbaseLite", QOP = "AUTH", нонса = "69773230-683C-4DCC-AB40-A21527A1F911"
CBLSocketChangeTracker [0x127d63810 sg_to_firstfoundry_net]: Не удается подключиться, отказавшись: CBLHTTP [401, http://my_login:*****@Uladzimir-Papkos-iPad.local.:55555/sg_to_firstfoundry_net/_changes?feed=normal&heartbeat=300000&style=all_docs] < --NSURLError [-1013, http://my_login:*****@Uladzimir-Papkos-iPad.local.:55555/sg_to_firstfoundry_net/_changes?feed=normal&heartbeat=300000&style=all_docs]
CBLRestPuller [http://my_login: ***** @ Uladzimir-Papkos-iPad.local.:55555/sg_to_firstfoundry_net]: ChangeTracker остановлен; ошибка = CBLHTTP [401, http://my_login:*****@Uladzimir-Papkos-iPad.local.:55555/sg_to_firstfoundry_net/_changes?feed=normal&heartbeat=300000&style=all_docs] < --NSURLError [-1013, http://my_login:*****@Uladzimir-Papkos-iPad.local.:55555/sg_to_firstfoundry_net/_changes?feed=normal&heartbeat=300000&style=all_docs]
Я думаю, что самое бревно вот эта строка:
: HTTP аутентификации не удалось; отправлено Авторизация: Базовый bXlfbG9naW46bXlfcGFzc3dvcmQ =; получил WWW-Authenticate: дайджест области действия = "CouchbaseLite", QOP = "AUTH", нонса = "69773230-683C-4DCC-AB40-A21527A1F911"
В качестве альтернативы я пытался использовать CBLAuthenticator
вместо инъекций логин/пароль в URL.Тем не менее не работает, но я получаю различные сообщения об ошибках в журнале:
Что изменилось:
// Added:
newReplication.authenticator = CBLAuthenticator.basicAuthenticator(withName: login, password: password)
// Removed:
components.user = login
components.password = password
Вот что я получаю в Xcode консоли после обновления кода:
CBLRestPuller [http://Uladzimir-Papkos-iPad.local.:55555/sg_to_firstfoundry_net]: Выход в интернет
CBLRestPuller [http://Uladzimir-Papkos-iPad.local.:55555/sg_to_firstfoundry_net] Прогресс: установить активный = 1
CBLRestPul ler [http://Uladzimir-Papkos-iPad.local.:55555/sg_to_firstfoundry_net]: Успешно вошел!
RemoteRequest: Добавлен Authorization заголовок для CBLPasswordAuthorizer [мой_логин/****]
CBLRemoteJSONRequest [GET http://Uladzimir-Papkos-iPad.local.:55555/sg_to_firstfoundry_net/_local/b3f625c9bddabfb59ee49d78f3bb484a5876b486]: Starting ...
DEALLOC CBLRemoteLogin [http://Uladzimir-Papkos-iPad.local.:55555/sg_to_firstfoundry_net] 2017-02-20 16:51: 28,335 Союз Дев [1922: 1702832] RemoteRequest: CBLRemoteSession начиная CBLRemoteJSONRequest [GET http://Uladzimir-Papkos-iPad.local.:55555/sg_to_firstfoundry_net/_local/b3f625c9bddabfb59ee49d78f3bb484a5876b486]
синхронизации: CBLReplication [от http://Uladzimir-Papkos-iPad.local.:55555/sg_to_firstfoundry_net]: активный, прогресс = 0/0, ERR: (нуль) щ л
CBLRestPuller [http://Uladzimir-Papkos-iPad.local.:55555/sg_to_firstfoundry_net]: Достижимость состояние =: достижима (20002), подвешенный = 0
RemoteRequest: Гот вызов для CBLRemoteJSONRequest [GET http://Uladzimir-Papkos-iPad.local.:55555/sg_to_firstfoundry_net/_local/b3f625c9bddabfb59ee49d78f3bb484a5876b486]: Метод = NSURLAuthenticationMethodHTTPDigest, ERR = (нуль)
RemoteRequest: задача: (фаза 3) continueWithoutCredential
Синхронизация: CBLRestPuller [http://Uladzimir-Papkos-iPad.local.:55555/sg_to_firstfoundry_net]: Сервер (нуль)
RemoteReque й: CBLRemoteJSONRequest [GET http://Uladzimir-Papkos-iPad.local.:55555/sg_to_firstfoundry_net/_local/b3f625c9bddabfb59ee49d78f3bb484a5876b486]: Получил ответ, статус 401
CBLRemoteJSONRequest [GET http://Uladzimir-Papkos-iPad.local.:55555/sg_to_firstfoundry_net/_local/b3f625c9bddabfb59ee49d78f3bb484a5876b486]: Получил ошибку CBLHTTP [401, "несанкционированным", http://Uladzimir-Papkos-iPad.local.:55555/sg_to_firstfoundry_net/_local/b3f625c9bddabfb59ee49d78f3bb484a5876b486]
синхронизации: CBLRestPuller [http://Uladzimir-Papkos-iPad.local.:55555/sg_to_firstfoundry_net]: Ошибка выборки последней последовательности: CBLHTTP [ 401, "несанкционированный", http://Uladzimir-Papkos-iPad.local.:55555/sg_to_firstfoundry_net/_local/b3f625c9bddabfb59ee49d78f3bb484a5876b486]
синхронизация: CBLRestPuller [http://Uladzimir-Papkos-iPad.local.:55555/sg_to_firstfoundry_net] Прогресс: установить ошибки = CBLHTTP [401, "несанкционированный", http://Uladzimir-Papkos-iPad.local.:55555/sg_to_firstfoundry_net/_local/b3f625c9bddabfb59ee49d78f3bb484a5876b486]
Может ли кто-нибудь указать мне, где я делаю что-то неправильно?
Можете ли вы попытаться использовать аутентификатор на репликаторе явно вместо того, чтобы указывать имя пользователя и пароль через URL-адрес? Добавьте эту строку до начала репликации -> 'newReplication.authenticator = [CBLAuthenticator basicAuthenticatorWithName: login password: password];' (извините за синтаксис Obj-C) – borrrden
Также этот вопрос уже сейчас: https: // форумы. couchbase.com/t/what-is-proper-way-to-setup-auth-layer-for-couchbaselite-cbllistener-and-cblreplication-for-p2p-database-replication/11838, поэтому этот вопрос SO, вероятно, останется без ответа, если он получает ответы на форумах) – borrrden
@borrrden, спасибо за ответ. Да, я попробовал ваше предложение, получая разные сообщения в журнале, но аутентификация не работает. Я обновил вопрос с более подробной информацией о предложенном вами решении. –