Есть еще один, очень безопасный метод. Это клиентские сертификаты. Знаете, как серверы представляют сертификат SSL, когда вы связываетесь с ними по https? Серверы могут запросить сертификат у клиента, чтобы они знали, что клиент - это то, кем они себя называют. Клиенты генерируют сертификаты и передают их вам по безопасному каналу (например, заходя в ваш офис с USB-ключом - предпочтительно USB-ключом без троянской программы).
Вы загружаете открытый ключ сертификатов клиентов сертификатов (и, при необходимости, сертификаты их подписывающих лиц) на свой веб-сервер, и веб-сервер не будет принимать соединения от кого-либо, кроме людей, у которых есть соответствующие закрытые ключи для сертификатов. он знает о. Он работает на уровне HTTPS, поэтому вы даже можете полностью пропустить аутентификацию на уровне приложения, такую как OAuth (в зависимости от ваших требований). Вы можете абстрагироваться от слоя и создать локальный центр сертификации и подписывать запросы сертификатов от клиентов, что позволяет пропустить этапы «заставить их приходить в офис» и «загрузить сертификаты на сервер».
Боль в шее? Абсолютно. Подходит для всего? Неа. Очень безопасно? Ага.
Однако он полагается на то, что клиенты сохраняют свои сертификаты в безопасности (они не могут размещать свои закрытые ключи в Интернете), и обычно используется, когда вы продаете услугу клиентам, а не позволяете кому-либо зарегистрироваться и подключиться.
В любом случае, это может быть не то решение, которое вы ищете (вероятно, не по правде), но это другой вариант.