необходимо:
1 подключиться к услуге рассылки СМС, наилучшее решение через существующий шлюз, например по России, мы после большого перебора остановились на
smsc.ru (это не реклама), у них хороший api, цены в рынке.
2 Необходимо реализовать взаимодействие с api смс шлюза на своем сервере (в зависимости от выбора api).
3 На стороне сервера необходимо генерировать код подтверждения, к примеру набор из 4 или 6 цифр или букв, или иной комбинации. Сохранить связку пользователь - код подтверждения, чтобы иметь возможность сравнения в будущем.
4 используя api шлюза отправляете код подтверждения на номер пользователя.
5 абонент вводит код подтверждения и отправляет вам на сервер, любым реализованным вами механизмом.
6 получив под подтверждения, проверяете, что данному пользователю был отправлен именно этот код. Если данные совпали - авторизуете пользователя.
Некоторые советы по реализации:
1 установите срок жизни кода, это нужно для безопасности
2 введите ограничение на количество попыток ввода, опять же для безопасности
3 при взаимодействии с api шлюза, необходимо анализировать ответы на ваши запросы, скажем человек ввел не существующий номер телефона, ошибся, вам необходимо корректно обработать данную ситуацию, подобных моментом может быть достаточно много.
4 некоторые шлюзы (как например указанный мной выше) примут российский номер в формате 89 и так далее, но надо понимать что не факт что все шлюзы так поступят, правильный код России 7, и следовательно номер мобильного должен начинаться на 79, в других странах есть свои особенности, и это надо учитывать.
5 установите срок жизни СМС сообщения (если шлюз позволяет это в своем api) не более срока жизни кода на вашем сервере, к примеру человек вне зоны действия сети, и СМС придет к нему через 1 час, когда уже не будет актуальна, в итоге вы заплатите за бессмысленное СМС сообщение, если у вас много абонентов, в итоге может набежать большая сумма. А так, сообщение просто не будет отправлено и вы сэкономите деньги.
На самом деле там еше много нюансов, в зависимости от потребности вашего сервиса, но в общих чертах примерно так.