2013-09-05 75 views
2

我在我的應用程序中使用憑證選取器進行用戶認證。我的數據庫中的認證詳細信息是字符串格式。但是Credential Picker傳遞的密碼是加密形式(默認爲Negotiate認證協議),所以如何解密該密碼以便我可以與我的數據庫密碼相匹配。 使用DB存儲的密碼進行密碼匹配的最佳解決方案是什麼?下面 是代碼片段:來自憑證選取器的密碼

function launchCredentialPicker() { 
    Windows.Security.Credentials.UI.CredentialPicker.pickAsync("My Target", "My Message", "my Caption").then(function (results) { 

     var domainName = results.credentialDomainName; 
     WinJS.Application.sessionState.Username = results.credentialUserName; 
     WinJS.Application.sessionState.Password = results.credentialPassword; 
     WinJS.Application.sessionState.RememberPassword = (results.credentialSaveOption === Windows.Security.Credentials.UI.CredentialSaveOption.hidden) ? "Hidden" : 
           ((results.credentialSaveOption === Windows.Security.Credentials.UI.CredentialSaveOption.selected) ? "Selected" : "Unselected"); 

    }); 
} 
+1

在您的數據庫中存儲密碼未加密是一個*非常壞的主意.. –

+0

這是不同的東西。請告訴如何將從憑證選取器(它是加密的和動態生成的)發出的密碼與數據庫密碼相匹配? –

+0

密碼被散列或加密了嗎?如果它被散列(最有可能),則無法確定原始密碼。如果它已加密,則需要共享密鑰或專用密鑰才能對其進行解密。 –

回答

3

你需要使用一個CredentialPickerOptions對象的CredentialPickerPickAsync方法。配置CredentialPickerOptions以使用基本身份驗證後,您將能夠看到用戶輸入的密碼。

var options = new Windows.Security.Credentials.UI.CredentialPickerOptions(); 
options.authenticationProtocol = Windows.Security.Credentials.UI.AuthenticationProtocol.basic; 

Windows.Security.Credentials.UI.CredentialPicker.pickAsync(options).then(/* */); 
+0

謝謝,但如何使用協商,Kerber,NTLM等其他身份驗證協議?當我在調試模式下檢查相同的密碼時,使用這些身份驗證協議時會返回不同的哈希值。那麼當我們必須使用Basic時,這些協議的用途是什麼?如果你知道那麼請告訴我如何使用這些協議進行登錄?謝謝。 –

相關問題