2017-02-20 57 views
0

我正在嘗試爲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]

任何人都可以指出我在哪裏我做錯了什麼?

+0

您可以嘗試在複製器上明確使用驗證器,而不是通過URL設置用戶名和密碼?在開始複製之前添加這行 - >'newReplication.authenticator = [CBLAuthenticator basicAuthenticatorWithName:login password:password];'(抱歉Obj-C語法) – borrrden

+0

此問題也在這裏: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

+0

@borrrden,謝謝你的迴應。是的,我嘗試了您的建議,在日誌中獲取不同的消息,但仍然無法驗證身份驗證。我更新了有關您建議的解決方案的更多詳細信息。 –

回答

0

與Couchbase工程師進行對話後,決定在這裏最好的解決方案是啓用安全的http連接,因爲通過不安全的http請求發送登錄/密碼沒有意義。

最簡單的(不是最安全)的方式來啓用HTTPS是接下來要做的:有關配置HTTPS的P2P複製連接可用here

// Change url to https 
components.scheme = "https" 

// Inject self-signed generated on the fly certificate into CBLListener 
try listener.setAnonymousSSLIdentityWithLabel("use_any_string_here") 

更多信息。

相關問題