Пользователь вам отправляет свой логин/пароль.
Вы по нему генерируете случайный токен, кладете его в базу, отправляете пользователю.
Для полного счастья хорошо всю работу с api вести через https, в этом случае без серьезной подготовки никто этот токен не украдет.
Мне кажется что в 99% случаев этого вполне достаточно.
Альтернативное решение - не использовать токен, а использовать в каждом запросе хеш, генерящийся на основе данных запроса и пароля пользователя (при этом сам пароль не передается)
условно что то вроде
$hash = md5($password . "method=users&rand=23084723984623947&limit=10");
$url = 'http://api.site.ru/users?rand=23084723984623947&limit=10&'.$hash;
Даже если запрос будет скропрометирован - максимум что получится сделать это его повторить.
С учетом того что при определенных методиках генерации rand можно сказать что rand должен быть уникальным для пользователя к примеру за месяц - получаем достаточно надежную историю.
И да, это велосипед, как это называется правильно к сожалению не знаю, думаю другие подскажут :)