沒有支持的API來執行此操作,即使您發現解決方法,您的應用程序可能會被拒絕從Mac App Store詢問用戶的密碼。
此外,您實際上並沒有通過這樣做獲得任何真正的安全。首選項存儲在沙盒中,併爲擁有它們的用戶提供寫入權限。這意味着,即使您的應用的用戶界面不允許用戶在沒有密碼的情況下修改首選項,用戶仍然可以使用其他應用(例如默認命令行工具)來更改應用的首選項而不需要密碼。
您在「系統偏好設置」應用程序中看到的鎖定圖標存在,以允許用戶寫入影響系統中所有用戶的偏好設置。這就是爲什麼他們需要認證,更重要的是,權限升級解鎖。但是,由於您的用戶已經有權在其沙箱中寫入應用的首選項,因此鎖定只會讓用戶錯誤地認爲這些首選項的權限更安全,可能是因爲這些首選項會影響多個用戶。
實現自己的密碼檢查的唯一方法是詢問用戶密碼,對其進行散列,然後將散列與存儲在用戶影子文件中的散列進行比較(請參閱http://www.defenceindepth.net/2011/09/cracking-os-x-lion-passwords.html)。但是,要訪問影子文件,您需要root權限,這些沙盒應用程序無法獲得。
即使您可以獲得密碼哈希值,您的驗證機制可能會損害用戶的安全性。身份驗證服務API會將密碼安全地存儲在內存中,並禁用軟件鍵盤記錄程序,並確保密碼在完成時不會保留在內存中。這需要使用沙盒用戶不可用的低級API。
蘋果在拒絕在授權服務API之外要求用戶密碼的應用程序方面也有既得利益。如果應用程序獲取用戶的密碼,則不會阻止該應用程序通過網絡將該密碼發送迴應用程序的作者。
如果Apple製作了一個與認證服務並行的API,提示用戶輸入密碼,但沒有權限升級,那麼他們可以確信該應用沒有獲得密碼。但是,因爲這個API不會爲用戶的偏好或數據增加任何真正的保護,並且因爲它會給人帶來錯誤的安全印象,所以我懷疑他們會添加這樣的API。
>我的應用程序的偏好我不知道你的問題,因爲我不知道他們如何訪問你的應用程序的偏好。 –
@ElTomato作爲一個例子,想一想Safari。用戶按下cmd-,出現Safari的首選項窗口。現在想象一下,我有一個包含各種選項卡(如Safari)的首選項窗口,在允許用戶更改其中一個選項卡上的設置之前,我希望用戶證明他知道登錄密碼。 – Alex
幾天前在開發者論壇上有一個與此相關的問題。如果您有興趣,請搜索'AuthorizationDB.h'。 –