На самом деле задача глубокая и очень сильно субьективная - типа как хочешь так и делай, вопрос безопасности безусловно всегда будет болеть.
Вот мои зарисовки:
https://vk.com/away.php?to=https%3A%2F%2Fdocs.goog...
В гугле допустим очень толсто сделано - есть сервис доступа у каждого большого приложения. Там создаются юзеры нескольких типов - это либо те, кто пользуется программой как клиент, либо админы, либо сервера (сервисные аккаунты).
Первые двое - это человеки, третьи - обычно компьютеры. Поскольку в отличие от компьютеров человеки имеют свойство все проебывать и забывать - им нужно постоянно получать разрешающий токен на сутки, что типа он это он. Компьютеру зашивается в файл секретный ключ и он отсылается при каждом запросе на твою систему, не требуя токена.
На почве этих идей чего только не сделали. Вконтакте например тебе нужно получить токен при каждом запросе с сервера или проверить - не вышел ли его срок. Зачем серверу токен - хер его знает. Ну может затем, что с компьютера могут спиздить жесткий диск, но опять же - что мешает с украденным файлом получить токен - ничего. Бесполезно.
У кого денег мало - в гет параметр засовывают пароль и просто его проверяют.
Средние бюджеты - делают регистрацию аккаунтов и выдают логины пароли, но это не годится для публичных сервисов, т.к. остаются долбоебы кто ходит в интернет с компа соседа и пиздит чужие пароли - для них и придумали токены и разрешение через СМС при малейшем намеке на смену местоположения.
На текущий момент самой четкой и безопасной системой считается белый список ip-адресов одновременно с ssh ключами и переброшенными портами от ssh. Ключи обеспечивают уникальность человека, ip - дополнительно указывают что скорее всего это кто-то конкретный пытается замутить какую-то дичь, а порты перебрасываются чтобы уменьшить число атак тупых ботов по 22. Но тут косяк, что ssh ключи они потому и ssh что позволяют получить доступ к консоли компа, а не допустим к пхп скрипту, так что можно только принцип подсмотреть.
Но допустим с этими ключами дикая несогласованность у создателей операционных систем, потому что они типа бы жутко подрывают "анонимность интернета". Поэтому обьяснить простому клиенту на сайте что такое пара ключей почти невозможно - это сьедает любой мозг, когда начинаешь путаться между приватным публичным, серверным приватным и серверным публичным и какой когда для чего нужен.
На деле там все просто - первый (приватный) принадлежит тебе и создается на твоем компе. С помощью него можно создать второй (т.е. публичный), который кому угодно отправить. Этот кто угодно добавляет его к себе в "белый список" и второе - добавляет его в папку к какому-то юзеру - чтобы связать логин с тобой - т.е. ты то можешь быть Гриха, а у него на компе ты gzhegow, и вот в папку gzhegow он кладет твой ключ, а потом еще в программку вносит что типа такому то ключу можно входить. После этого тот, у кого есть приватный может ходить туда, где его публичный в белом списке. В общем то все. Так делают связь например сервер-сервер - создали два приватных, на их базе два публичных, обменялись публичными - все работает - можно с одного сервера удаленно давать команду другому и им не нужна дибильная кнопка "разрешить подключение", которую должен нажать человек - серваки то небось один в Германии, другой в Камбодже.