我正在嘗試爲p2p複製配置基本登錄/密碼身份驗證。
複製工作正常,沒有身份驗證。所以我很確定我的問題與認證配置有關。針對p2p數據庫複製爲CouchbaseLite(CBLListener和CBLReplication)設置auth層的正確方法是什麼?
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失敗;發送授權:基本bXlfbG9naW46bXlfcGFzc3dvcmQ =;得到了WWW身份驗證:摘要境界= 「CouchbaseLite」,QOP = 「權威性」,現時= 「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身份驗證:摘要 境界= 「CouchbaseLite」,QOP = 「AUTH」, 隨機數= 「69773230-683C-4DCC-AB40-A21527A1F911」
備選地我試圖用CBLAuthenticator
代替注入登錄/密碼輸入網址。仍然無法正常工作,但是我在日誌中收到不同的錯誤信息:
什麼改變:
// 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:增加了對CBLPasswordAuthorizer [my_login/****]
CBLRemoteJSONRequest Authorization頭[GET http://Uladzimir-Papkos-iPad.local.:55555/sg_to_firstfoundry_net/_local/b3f625c9bddabfb59ee49d78f3bb484a5876b486]:開始...
的dealloc CBLRemoteLogin [http://Uladzimir-Papkos-iPad.local.:55555/sg_to_firstfoundry_net] 2017年2月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:GOT挑戰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 ST: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:// forums。 couchbase.com/t/what-is-proper-way-to-setup-auth-layer-for-couchbaselite-cbllistener-and-cblreplication-for-p2p-database-replication/11838因此,如果這個SO問題可能仍然沒有答案,如果它得到在論壇上回答) – borrrden
@borrrden,謝謝你的迴應。是的,我嘗試了您的建議,在日誌中獲取不同的消息,但仍然無法驗證身份驗證。我更新了有關您建議的解決方案的更多詳細信息。 –