Как скрыть учетные данные OAuth, хранящиеся в приложении Angular?

#angular #api #oauth

#angular #API #oauth

Вопрос:

Я работаю с приложением Angular 7, которое выполняет вызовы API на другом сервере. Для этого API требуется авторизация Oauth1.

Меня беспокоит то, что учетные данные OAuth1 идеально видны в dist/main.js файле, и, очевидно, я хочу скрыть эту информацию.

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

Я также думал о хранении учетных данных в базе данных на стороне интерфейсного сервера, к которой приложение Angular получает прямой доступ, но мне интересно, не слишком ли это для моих нужд.

В настоящее время учетные данные являются атрибутами вспомогательного класса:

 export class OAuth1Authorization implements IAuthorization {
    private token = {
        consumerKey: '...',
        consumerSecret: '...',
        accessToken: '...',
        tokenSecret: '...'
    };
    private signatureMethod = 'HMAC-SHA1';
    private version = '1.0';
    private nonce;
    // ...
}
  

И последнее, я хочу внести ясность в тот факт, что моя пользовательская база не хранит токен, возвращаемый удаленным сервером, например, после аутентификации по имени пользователя / паролю.

На самом деле мне нужно хранить безопасным способом (например, чтобы к информации о подключении нельзя было получить доступ открытым текстом!) 4 токена, которые должны быть известны заранее, как на интерфейсной, так и на серверной стороне, и которые некоторое время не будут меняться.

Ответ №1:

К сожалению, OAuth1 не был разработан для современных приложений JS: секрет необходим для аутентификации, и, как вы заметили, не существует полностью защищенного от пуль способа сохранить его на стороне клиента.

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

Страница документации OAuth1 (https://oauth1.wp-api.org/docs/advanced/Web.html ) предлагает использовать минимальный прокси, который знает секреты и может выполнить аутентификацию, когда ваш веб-клиент отправляет ему несекретные параметры.