簡體   English   中英

使用桌面客戶​​端時保護Identity Server中的機密

[英]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章)。

可能不是一個完整的解決方案,但是下面是我的建議。

  1. 將代碼編譯為本機二進制文件-我覺得這很難獲得秘密(並非不可能) 如何將應用程序編譯為.NET Native
  2. 使用一些混淆器(大多數工具都是付費的)- 一些混淆器工具列表

  3. 您可以加密放置在程序集中的密鑰 ,然后在運行時調用api 解密該密鑰 (您可能需要首先根據clientID,app uniqueID,deviceID等驗證傳入的請求 ,然后執行解密邏輯),解密應請勿對所有請求執行操作,因為這可能會降低性能,只需執行一次並將解密的機密存儲在某個位置(可能在內存或Redis緩存中),然后進一步使用它直到應用程序關閉。 api的調用應使用HTTPS,否則可以使用提琴手之類的工具來了解秘密。

為了確保整體安全性,有很多事情要考慮,因此請以我的建議作為一個小介紹。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM