[英]Securing a secret in Identity Server when using a desktop client
我正在使用Identity Server 4提供對API的令牌訪問。 我正在設置我的客戶代碼; 看起來像這樣:
var disco = await _httpClient.GetDiscoveryDocumentAsync(new DiscoveryDocumentRequest
{
Address = "https://indentityserveraddress.com",
Policy =
{
ValidateIssuerName = false
}
});
var response = await _httpClient.RequestClientCredentialsTokenAsync(new ClientCredentialsTokenRequest
{
Address = disco.TokenEndpoint,
ClientId = "client",
ClientSecret = "secret",
Scope = "api1"
});
如果這是一個Web應用程序,我可以簡單地將秘密存儲在web.config中,從那里讀取並提供給Identity Server。 但是,此調用來自UWP客戶端。
我的問題是:使用桌面客戶端保護此機密時有什么策略? 如果只是純文本格式,則可以輕松地通過DotPeek或ILDasm或類似的方式來放置程序集,然后將其存儲在客戶端的配置客戶端中,會使該問題更加嚴重。 我無法將其存儲在服務器上,因為我需要通過身份驗證才能訪問它(第22章)。
可能不是一個完整的解決方案,但是下面是我的建議。
使用一些混淆器(大多數工具都是付費的)- 一些混淆器工具列表
您可以加密放置在程序集中的密鑰 ,然后在運行時調用api 解密該密鑰 (您可能需要首先根據clientID,app uniqueID,deviceID等驗證傳入的請求 ,然后執行解密邏輯),解密應請勿對所有請求執行操作,因為這可能會降低性能,只需執行一次並將解密的機密存儲在某個位置(可能在內存或Redis緩存中),然后進一步使用它直到應用程序關閉。 api的調用應使用HTTPS,否則可以使用提琴手之類的工具來了解秘密。
為了確保整體安全性,有很多事情要考慮,因此請以我的建議作為一個小介紹。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.