Защита секрета в Identity Server при использовании настольного клиента - PullRequest
0 голосов
/ 16 декабря 2018

Я использую 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.config, прочитать его оттуда и передать на Identity Server.Тем не менее, этот вызов от клиента UWP.

Мой вопрос: какие существуют стратегии при использовании настольного клиента для защиты этого секрета?Если это просто в текстовом виде, сборка может быть легко помещена через DotPeek или ILDasm или что-то подобное, и хранение этого в клиенте конфигурации на клиенте делает эту проблему еще хуже.Я не могу сохранить его на сервере, потому что мне нужно пройти аутентификацию для доступа к нему (catch-22).

1 Ответ

0 голосов
/ 16 декабря 2018

Может не быть полным решением, но вот мои предложения.

  1. Скомпилируйте код в собственные двоичные файлы - я чувствую, что это затрудняет получение секрета (не невозможно) Каккомпилировать приложения в .NET Native
  2. Использовать некоторые Обфускаторы (большинство инструментов там платные) - Некоторый список инструментов Обфускатора

  3. Вы можете зашифровать секрет, помещенный в сборку, а затем вызвать API для расшифровать секрет во время выполнения (Вам может понадобиться сначала проверить входящие запросы на основе clientID,приложение uniqueID, deviceID и т. д., а затем выполнить логику дешифрования), дешифрование не должно выполняться для всех запросов, так как это может ухудшить производительность, просто сделайте это один раз и сохраните расшифрованный секрет где-то (может быть в памяти или в кэше redis) и используйте его далеепока приложение не закроется.Вызовы в API должны быть сделаны с HTTPS, иначе можно использовать секретные инструменты, чтобы узнать секрет.

Существует множество вещей, которые необходимо учитывать для полной безопасности, поэтому рассмотрите мои предложения какнебольшое вступление.

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