Как вставить постоянные значения Identity Server 4 ApiSecret с помощью T-SQL - PullRequest
0 голосов
/ 16 января 2019

Я прошел через Identity Server 4 QuickStart для использования Entity Framework для постоянного хранения конфигурации и рабочих данных. В QuickStart ApiResources загружаются в базу данных в виде кода. Секрет Api устанавливается с

        new ApiResource("api1", "My API")
        {
            ApiSecrets = { new Secret("secret".Sha256())}
        }

в конструкторе ApiResource. Когда в Startup.InitializeDatabase этот ApiResource добавляется в ConfigurationDbContext.ApiResources DbSet,

        foreach(var resource in Config.GetApiResources())
        {
            context.ApiResources.Add(resource.ToEntity());
        }
        context.SaveChanges();

запись в дочерней таблице ApiSecrets содержит читаемое текстовое значение в поле ApiSecrets.Value.

    K7gNU3sdo+OL0wNhqoVWhr3g6s1xYv72ol/pe/Unols=

Я хотел бы управлять своими данными конфигурации с помощью сценариев SQL, но я не могу понять, как правильно установить ApiSecrets.Value. Я пытался использовать T-SQL HASHBYTES ('SHA2_256', 'secret'), но это приводит к нечитаемому (я думаю, двоичному) значению в ApiSecrets.Value. Есть ли способ правильно установить хешированный секрет через T-SQL?

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Вы были на правильном пути, чтобы использовать HASHBYTES, просто нужно получить хэш Base64 из BinaryHash:

DECLARE @HASHBYTES VARBINARY(128) = hashbytes('sha2_256', 'secret')
SELECT cast(N'' as xml).value('xs:base64Binary(sql:variable("@HASHBYTES"))', 'varchar(128)');
0 голосов
/ 16 января 2019

Вы можете использовать алгоритм ниже для создания секрета, затем вы можете сохранить его в SQL:

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());
}

вы также можете использовать passwordgenerator.net

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...