當前正在嘗試構建一個單一的登錄服務器爲幾個客戶端使用。因爲我不完全知道,有多少個客戶端,我計劃完成,因此我可以使用EntityFramework配置存儲在運行時添加客戶端。IdentityServer4存儲客戶端密碼
我現在的問題是如何設置客戶端的機密。我嘗試生成一個新的GUID並將其用作祕密。現在的問題是,配置存儲只是想保存密碼的散列版本,我需要訪問普通密碼以將其添加到實際的客戶端應用程序。
我認爲這是故意的,它不鼓勵保存普通版的祕密?什麼是保存祕密的解決方案?
在此先感謝!
當前正在嘗試構建一個單一的登錄服務器爲幾個客戶端使用。因爲我不完全知道,有多少個客戶端,我計劃完成,因此我可以使用EntityFramework配置存儲在運行時添加客戶端。IdentityServer4存儲客戶端密碼
我現在的問題是如何設置客戶端的機密。我嘗試生成一個新的GUID並將其用作祕密。現在的問題是,配置存儲只是想保存密碼的散列版本,我需要訪問普通密碼以將其添加到實際的客戶端應用程序。
我認爲這是故意的,它不鼓勵保存普通版的祕密?什麼是保存祕密的解決方案?
在此先感謝!
使用以下算法生成sha256哈希。這與IdentityServer4.Models.HashExtensions
類中使用的算法相同。
using System.Security.Cryptography;
static class Extentions
{
public static string Sha256(this string input)
{
using (SHA256 shA256 = SHA256.Create())
{
byte[] bytes = Encoding.UTF8.GetBytes(input);
return Convert.ToBase64String(((HashAlgorithm)shA256).ComputeHash(bytes));
}
}
}
void Main()
{
Console.WriteLine("secret-as-guid".Sha256());
}
謝謝你的回答,但那不是我遇到的問題。我可以創建散列並保存散列的祕密。我想要做的事情實際上是以明文保存祕密,以便日後可以閱讀。我想知道這是不應該的,因爲在身份服務器4中無法使用自定義數據庫表等等 – fbrthld
您最好生成祕密,並立即將其提供給所有者,而不要將其存儲在純文本中。以純文本保存祕密是一個禁忌。無論如何,如果您確實需要稍後訪問它,請使用您自己的帶有客戶端ID的表格進行祕密映射。在存儲和解密密碼之前,您應該盡力加密密碼,而不是以明文形式存儲密碼。 – rawel
姆姆。這可能是一個解決方案。我想我會在祕密世代中將它交給用戶,而不是永久保存。感謝您的輸入! – fbrthld
您不應該以純文本格式存儲客戶端密鑰。
總是假定你的配置數據庫被攻破 - 然後這些祕密可以用來冒充你的客戶端。
這對您來說可能會稍微不方便 - 但這是一種最佳做法(也符合其他令牌服務處理該問題的方式)。
如果你在休息保護祕密的其他方式 - 您可以在純文本基於祕密驗證添加到DI
你不應該保存明文祕密。你爲什麼想要訪問純文本的祕密? – moritzg
我想自動生成它們,然後我需要將它們讀到某處,以便我可以將它們添加到我的應用程序中。這將是與例如Facebook oauth2相同的工作流程。你去開發者頁面,創建一個應用程序(這裏是客戶端),然後可以讀取祕密並將其添加到您的應用程序。爲此我需要將它們存儲在普通的地方? – fbrthld
這些是您自己的應用程序嗎? – moritzg