Я разрабатываю небольшой API для своего приложения.Моя цель - разрешить внешним доменам запрашивать API с помощью запроса POST, который, как я ожидаю, чаще всего будет выполняться через клиентский протокол, такой как AJAX.
Я бы хотел ограничить доступ к своему API для пользователейЯ предварительно авторизовался, и мне интересно, как лучше всего поддерживать эту функцию.
Моей первой мыслью было сохранение таблицы ключей для моих пользователей.Я бы потребовал предоставить ключ при доступе к моему API;этот ключ будет проверяться по моей таблице авторизованных ключей во время каждого запроса API, и запрос будет выполняться только в случае обнаружения совпадения.Но это было бы небезопасно: так как большинство пользователей получат доступ к моему API через протокол на стороне клиента, такой как AJAX, их код предоставит ключ, который может быть присвоен злоумышленником.
Моя вторая мысль былахранить таблицу ключей и рефереров.Каждый авторизованный реферер будет иметь свой уникальный ключ.Когда пользователь пытался получить доступ к моему API с помощью своего секретного ключа, я извлекал HTTP_REFERER этого пользователя и проверял, чтобы соответствующий домен соответствовал предоставленному ключу.Тем не менее, это также можно использовать: злоумышленник может легко использовать cUrl, чтобы подделать реферер и использовать систему.
Есть ли способ создать безопасный API, к которому могут обращаться только авторизованные пользователи, но к которым обращаютсячерез клиентский протокол, такой как AJAX?