Я использую токены JWT в заголовках HTTP для аутентификации запросов к серверу ресурсов. Сервер ресурсов и сервер аутентификации - это две отдельные рабочие роли в Azure.
Я не могу определиться, стоит ли мне сохранять заявки в токене или прикреплять их к запросу / ответу каким-либо другим способом. Список утверждений влияет на отображение элементов пользовательского интерфейса на стороне клиента, а также на доступ к данным на сервере. По этой причине я хочу убедиться, что заявки, полученные сервером, являются подлинными и проверены перед обработкой запроса.
Примеры заявлений: CanEditProductList, CanEditShopDescription, CanReadUserDetails.
Причины, по которым я хочу использовать для них токен JWT:
- Лучшая защита от редактирования претензий на стороне клиента (например, взлом списка претензий).
- Не нужно искать претензии по каждому запросу.
Причины, по которым я не хочу использовать токен JWT:
- Сервер аутентификации должен знать список заявок, ориентированный на приложения.
- Токен становится единственной точкой взлома.
- Я читал несколько вещей о том, что токены JWT не предназначены для данных уровня приложения.
Мне кажется, что у обоих есть недостатки, но я склоняюсь к включению этих утверждений в маркер и просто хочу запустить это людьми, которые имели дело с этим раньше.
ПРИМЕЧАНИЕ. Я буду использовать HTTPS для всех запросов API, поэтому мне кажется, что токен будет «достаточно безопасным». Я использую AngularJS, C #, Web API 2 и MVC5.
источник
Ответы:
Я храню только утверждения идентификатора (идентификатор пользователя и т. Д.) (Зашифрованные) в моем jwt.
Затем, когда я получаю токен на сервере (API), я могу выполнить поиск на стороне сервера (db или вызов локальной сети API) и извлечь все ассоциации с идентификатором пользователя (приложения, роли и т. Д.)
Однако, если вы хотите добавить больше в jwt, просто будьте осторожны с размером, поскольку он, вероятно, будет отправляться при каждом запросе, но обязательно шифруйте конфиденциальные данные заявки.
источник
Похоже, что аутентификация (кто пользователь) и авторизация (что пользователь может делать) не так четко разделены, как хотелось бы.
Если вы не хотите, чтобы сервер аутентификации знал, на что пользователь имеет право, ограничьте количество утверждений в этом JWT идентификатором пользователя, как и предлагал wchoward. Вы могли бы иметь другой сервер, известный как сервер авторизации, чтобы посмотреть, на что пользователь имеет право.
Этап авторизации может быть выполнен сервером ресурсов, когда клиент впервые предоставит токен аутентификации. Затем сервер ресурсов отправит клиенту токен, содержащий заявки на авторизацию.
Примечание: оба JWT должны быть подписаны разными ключами.
Плюсы:
Против:
источник