2016-12-27 109 views
2

我有一個ASP.NET Web API服務器的WPF客戶端。我想爲使用客戶端的任何特定Windows用戶生成唯一密鑰,以便Web API可以阻止來自該用戶的多次登錄嘗試。我首先考慮使用:爲一個Windows用戶生成一個唯一的密鑰

Environment.UserDomainName + "\" + Environment.UserName 

但是,這可能是衆多用戶相同。我不想包含機器名稱,因爲我想跟蹤用戶使用的任何機器。如何使用UserDomainName + "\" + Environment.UserName組合下的客戶端應用程序爲特定的Windows用戶創建唯一密鑰,而不管他們使用的是哪臺計算機?

注:的關鍵應該根據用戶的變化進行校對,以便改變其鍵,以防止用戶被鎖定將使其無效。沒有本地數據庫,因此此時密鑰存儲在用戶主目錄中的用戶設置文件中。但是,無論文件存儲在哪裏,他們機器上的任何管理員都可以訪問它,作爲家庭用戶,他們通常都是管理員。

回答

2

您可以使用GUID制度,是這樣的:

key = Guid.NewGuid() + "\\" + Environment.UserDomainName + "\\" + Environment.UserName; 

的一個問題是,有一個非常小的機會,同樣的GUID將被再生,防止這種情況,你可以儲存所有的「使用'列表/字典中的GUID並重新生成一個。

+0

GUID是要走的路。這是它的目的。 – Kelly

+0

感謝Hisham,這是一個非常好的主意,但我忘記提及我希望能夠檢測用戶是否更改了密鑰,例如,嘗試訪問原始密鑰導致它們被阻止時訪問。連接到上面使用的結構的校驗和是確保這一點的一種方式,但也許有一種更簡單的方法,例如使用內置了這種校驗和的已知算法對其進行哈希處理。我不需要實際的用戶名信息爲了識別用戶,Identity稍後使用Jwt進行此操作。請參閱我的編輯到OP。 – ProfK

+1

如果我只是加密整個用戶設置文件,那麼你的方法就相當安全了。他們沒有業務訪問它,但通過「首選項」視圖,當然不包括用戶密鑰。 – ProfK