LINUX.ORG.RU

Что такое токен и где его хранить?

 , , ,


0

3

Токен - это ключ, с помощью которого можно получить доступ к ресурсу. Правильно?

У меня заказ на сервис, к которому нужно иметь доступ через api. Как реализовать токен?

Я считаю, что токен это аналог куки сессии. Правильно? Если правильно, то могу ли я использовать этот факт в своем приложении. Разница будет лишь в том, что значения кука (то есть уже токена) буду передавать в отдельном заголовке.

Как токены реализованые в ваших проектах?



Последнее исправление: pisipu (всего исправлений: 1)

Простейший вариант на 4 таблицы:

api_components (функционал проекта делится на компоненты/секции, к которым в дальнейшем будете раздавать доступ):
> id    int(11)
> name  varchar(128)

api_tokens (сами токены, в данном примере токен имеет длину 32 символа):
> id         int(11)
> name       varchar(32)
> is_active  tinyint(1)

api_rules (правила доступа для токенов - раздаёте на указанный токен определённые компоненты/секции):
> id            int(11)
> token_id      int(11)
> component_id  int(11)

api_log (логи доступа к компонентам/секциям):
> component_id  int(11)
> token_id      int(11)
> action        varchar(16)
> ip            varchar(15)
> timestamp     timestamp

Обращение происходит через HTTP/HTTPS, сам токен на доступ (token name) пересылается в заголовке POST/GET (второй вариант если API не представляет собой ничего ценного) вместе с названием компоненты/секции (component) и совершаемым действием над ней (action).

Со стороны сервера, соответственно, необходимо написать проверку на существование токена, проверку на доступ к компоненте/секции, проверку на деактивированный аккаунт, проверку на существование запрашиваемого действия (можно создать ещё одну таблицу вида api_component_actions с описанием всех возможных действий) + реализация самих действий, которые запросил клиент.

Примера выше достаточно, чтобы было более-менее приличное разделение доступа в дальнейшем, логирование, управление токенами с заморозкой как всего аккаунта (is_active), так и с вычленением только в определённой секции проекта (rules).

ThisNameWasFree
()
Последнее исправление: ThisNameWasFree (всего исправлений: 3)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.