@stcmd04236

Как запрашивать аутентификацию для каждого запроса в WEB API?

Добрый день! Сделал кастомную аутентификацию web api. Все. Работает. Но вот есть большая проблема. Мне нужно чтобы сервер на каждом запросе спрашивал аутентификационные данные. Дело в куках и сессиях но как их отключить?

Или я что то не понял на счет аутентификации? Вообщем вот что хочу сделать:

Сервер должен проверить каждый запрос и выполнить аутентификацию на основе токена и секретного ключа пользователя. В заголовке запроса отправляется хеш отправляемых данных который создан с использованием секретного ключа. И тут надо проверить заголовок каждый раз. Как это делать?

Или создать фильтр авторизации и на этом проверить заголовки (так как эти фильтры вызывается для запроса каждый раз)? Но не совсем правильный подход.
  • Вопрос задан
  • 525 просмотров
Пригласить эксперта
Ответы на вопрос 2
1. Аутентификация выполняется однократно. Это довольно сложный, потенциально многоэтапный процесс. Делать аутентификацию при каждом запросе - 100% неверное решение, этим просто невозможно будет пользоваться.
2. Т.к. аутентификация выполняется однократно, то в качестве метки для всех запросов от некоторого аутентифицированного юзера используется некий токен. Это может быть ID сессии, приходящий в куках, это может быть и JWT, посылаемый в хереде Authorization. Вот этот токен и нужно проверять каждый раз. Суть этого токена в том, что он а) так или иначе временный (хотя может продлеваться тем или иным образом); б) не связан с конкретным методом аутентификации. Т.е. он представляет собой конкретную успешно проведенную аутентификацию. С некоторой натяжкой это можно назвать "сессией". Проверять этот токен ГОРАЗДО легче, чем делать новую аутентификацию - либо просто нужно найти сессию в списке (ну и проверить IP на всякий случай) в случае ID сессии, либо проверить валидность подписи в случае JWT токена. Как это делать - зависит от конкретной реализации этого токена, если скажете что используете - попробую подсказать, что надо проверять.
3. Насчёт фильтров авторизации - уточните версию ASP.NET, тогда поглядим.
Ответ написан
Комментировать
@stcmd04236 Автор вопроса
Станислав Макаров Спасибо за объяснения.

2. Не JWT но почти одинаково.
3. Версия .net 4.5.1

Мне нужно создать сервис REST API и одно из требований это отсутствие состояний www.restapitutorial.ru. По этому чтобы определит пользователя передаю токен сформированный следующим образом:

Создаем массив из сегментов и параметров url. Сортируем по алфавиту. Создаем строку из этого массива. Добавляем к нему хеш секретного ключа. Добавляем текущее время в формате unix. И передаем его в заголовке Аuthorization вместе с UUID пользователя.

var token = url + secureKeyHash + currentTime;
var authorization = uuid + ":" + token;


Сервер проверят есть ли пользователь с таким uuid. Если есть тогда берет хеш секретного ключа пользователя. Создает токен таким же образом и сверяет с токеном из заголовка.

Все это сделал. Создал глобальный фильтр аутентификации. Только вот сессии и куки мешают.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы