У меня есть это веб-приложение, которое будет полностью на стороне клиента (HTML, CSS, JavaScript / AngularJS и т. Д.). Это веб-приложение будет взаимодействовать с REST API для доступа и изменения данных. В настоящее время неясно, какой тип системы аутентификации будет использовать REST API.
Насколько я понимаю, любой тип системы аутентификации API (API Keys, OAuth 1/2 и т. Д.) Будет иметь определенные данные, которые должны храниться в секрете, иначе доступ может быть скомпрометирован. Для API-ключей сами ключи должны быть секретными, для OAuth 2 секретные / клиентские токены / токены обновления должны храниться в секрете, я уверен, что некоторые из 4 ключей, задействованных в OAuth 1, должны храниться в секрете (не слишком много опыта с OAuth 1). Я пытался подумать, есть ли способ сохранить этот секретный материал в чистом клиентском веб-приложении без каких-либо промежуточных уровней на стороне сервера.
Я пытался думать об этом, и я не могу думать ни о каком месте, чтобы сделать это. Я имею в виду, что не могу сохранить его в javascript, потому что любой может просто просмотреть исходный код или открыть консоль и получить данные. Я не уверен на 100%, насколько безопасен localStorage и могут ли пользователи получать доступ к этим данным или изменять их. Даже если локальное хранилище было безопасным, два способа ввода данных в него - нет. Один из способов - просто сохранить данные в исходном коде javascript, и это самая небезопасная вещь, о которой я только могу подумать. Теперь, если бы я использовал что-то наподобие OAuth 2, в котором остальные API-интерфейсы давали бы мне токены, это все равно было бы небезопасно (лучше, чем первый вариант), потому что эти токены были бы возвращены в виде простого текста, который любой, кто может видеть запросы, которые делает компьютер, могли видеть.
Есть ли способ, чтобы приложение, полностью работающее на стороне клиента, могло безопасно хранить секретные фрагменты данных без какого-либо промежуточного уровня на стороне сервера?