401 Unauthorized: аутентификация и не только
Организация KuppingerCole ежегодно публикует результаты исследований, где оценивает участников рынка в разных областях Identity & Security. В 2023 году был также опубликован и анализ для рынка Access Management. Отмечается, что The term “Access Management”…
2023_10_23;_Report_File;_KuppingerCole_API_Mgmt_Leadership_Compass.pdf
3.5 MB
👍1
Код 401 Unauthorized не про авторизацию
Код и название данной ошибки отражены в названии канала.
Unauthorized вообще можно перевести как "неавторизованый". Однако интересный парадокс в том, что в современном вебе 401 ошибка говорит не об ошибке авторизации, а об ошибке аутентификации.
Такую ошибку чаще всего вернем, если аутентификация запроса была неуспешна. Например, если в запросе отсутствовали необходимые учётные данные (некий токен, sessionID) или проверка их валидности была неуспешной.
При этом для ошибок уже авторизации встречаем как раз код 403 Forbidden. Данный код обычно возвращаем, если с переданными учётными данными к запрашиваемому ресурсу/операции нет доступа. То есть аутентификацию запроса выполнили, но вот доступа уже нет.
Было интересно узнать, если какая-то история под данным "исторически сложилось". Дошел до первого RFC для HTTP/1.0 - RFC 1945 - однако ничего интересного, увы, не нашел. Вероятно, идея была связана с тем же заголовком Authorization, используемым для целей аутентификации.
Конечно, семантика использования "правильных" и "неправильных" кодов ответа при проектировании API - это большой многолетний холивар.
Сюда же можно вспомнить подход, когда порой мы не хотим даже показывать факт существования какого-то ресурса без необходимых прав доступа, и в ответ на запрос будем и вовсе возвращать 404.
#api
Код и название данной ошибки отражены в названии канала.
Unauthorized вообще можно перевести как "неавторизованый". Однако интересный парадокс в том, что в современном вебе 401 ошибка говорит не об ошибке авторизации, а об ошибке аутентификации.
Такую ошибку чаще всего вернем, если аутентификация запроса была неуспешна. Например, если в запросе отсутствовали необходимые учётные данные (некий токен, sessionID) или проверка их валидности была неуспешной.
При этом для ошибок уже авторизации встречаем как раз код 403 Forbidden. Данный код обычно возвращаем, если с переданными учётными данными к запрашиваемому ресурсу/операции нет доступа. То есть аутентификацию запроса выполнили, но вот доступа уже нет.
Было интересно узнать, если какая-то история под данным "исторически сложилось". Дошел до первого RFC для HTTP/1.0 - RFC 1945 - однако ничего интересного, увы, не нашел. Вероятно, идея была связана с тем же заголовком Authorization, используемым для целей аутентификации.
Конечно, семантика использования "правильных" и "неправильных" кодов ответа при проектировании API - это большой многолетний холивар.
Сюда же можно вспомнить подход, когда порой мы не хотим даже показывать факт существования какого-то ресурса без необходимых прав доступа, и в ответ на запрос будем и вовсе возвращать 404.
#api
👍4🔥3😁3
Навигация по каналу ⛔️
Здесь описаны основные темы, освещаемые на канале, с использование хэштегов.
#iam_general — материалы про Identity & Access Management
#oauth — все, что касается OAuth и OIDC
#security — про безопасность
#api — проектирование, безопасность и интеграция API
#jwt — про JWT и работу с ними
#article — статьи из различных источников
#paper — полноформатные работы, научные статьи
#book — книги и обзоры книг
#video — обзоры видео-материалов, докладов, выступлений
#my_publication — мои опубликованные статьи
#my_talk — мои выступления, доклады
#announce — объявления о выступлениях, событиях
Для просмотра всех постов, относящихся к данной теме, можно использовать поиск по нужному хэштегу.
Список тегов будет дополняться по мере развития канала.
Здесь описаны основные темы, освещаемые на канале, с использование хэштегов.
#iam_general — материалы про Identity & Access Management
#oauth — все, что касается OAuth и OIDC
#security — про безопасность
#api — проектирование, безопасность и интеграция API
#jwt — про JWT и работу с ними
#article — статьи из различных источников
#paper — полноформатные работы, научные статьи
#book — книги и обзоры книг
#video — обзоры видео-материалов, докладов, выступлений
#my_publication — мои опубликованные статьи
#my_talk — мои выступления, доклады
#announce — объявления о выступлениях, событиях
Для просмотра всех постов, относящихся к данной теме, можно использовать поиск по нужному хэштегу.
Список тегов будет дополняться по мере развития канала.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🤔1
Как говорил профессор Фарнсворт из Футурамы: "Good news, everyone!"
📆 Уже 23 мая буду выступать на PHDays в Москве с докладом "Токены доступа и API Gateway: как обеспечить безопасность запросов" — [ссылка на доклад]
(ребята из оргкомитета PHDays прислали и вот такую "красивую блогерскую картинку" (дословно!), так что ее тоже прикрепляем к посту)
📆 А всего через неделю после, 31 мая, я перемещаюсь в Новосибирск, где также выступлю с данной темой на🎙 CodeFest 15 — [ссылка на доклад]
В докладе поговорим про различные подходы использования API Gateway как части более общего API security-решения в контексте его работы с токенами доступа и подумаем, а есть ли лучший из них. Также обсудим, почему нужно ограничивать область действия access token и может ли API Gateway помочь и в данном вопросе.
Так что, кто уже спланировал посетить данные конференции, приходите на доклад и просто пообщаться-познакомиться. А кто пока только планирует, вот вам еще один повод😊
#announce #my_talk #api #iam_general
📆 Уже 23 мая буду выступать на PHDays в Москве с докладом "Токены доступа и API Gateway: как обеспечить безопасность запросов" — [ссылка на доклад]
(ребята из оргкомитета PHDays прислали и вот такую "красивую блогерскую картинку" (дословно!), так что ее тоже прикрепляем к посту)
📆 А всего через неделю после, 31 мая, я перемещаюсь в Новосибирск, где также выступлю с данной темой на
В докладе поговорим про различные подходы использования API Gateway как части более общего API security-решения в контексте его работы с токенами доступа и подумаем, а есть ли лучший из них. Также обсудим, почему нужно ограничивать область действия access token и может ли API Gateway помочь и в данном вопросе.
Так что, кто уже спланировал посетить данные конференции, приходите на доклад и просто пообщаться-познакомиться. А кто пока только планирует, вот вам еще один повод
#announce #my_talk #api #iam_general
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥3🤔2
Запись моего доклада "Токены доступа и API gateway: как обеспечить безопасность запросов" с PHDays уже доступна. Посмотреть можно на:
📌 YouTube
📌 VK Видео
📌 Rutube
#api #iam_general #oauth #my_talk
#api #iam_general #oauth #my_talk
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🤔2❤1🔥1
Гора родила мышь, а я наконец родил статью на основе материала, про который рассказывал весной на PHDays 2025 и CodeFest 15.
https://habr.com/ru/articles/872918/
#api #oauth #my_publication
https://habr.com/ru/articles/872918/
#api #oauth #my_publication
Хабр
Токены доступа и API Gateway: как обеспечить безопасность запросов
Распределенные системы (aka микросервисы) набрали популярность и применяются все шире в современных реалиях. Сервисов становится больше, привычные задачи для них решаются сложнее, усложнились и...
👍20 10🔥3🤔1
API_sec public CLEAN.pdf
663.2 KB
Базовые правила правила работы с API в современном мире
Какой громкий заголовок, да ведь? Несколько лет назад я читал в одной компании внутренний доклад "Разрабатываем и тестируем безопасные API", в нем как раз сформулировал тезисно, в виде правил то, что сам интуитивно всегда применял. Мир наш, быть может, и стал более современным, однако свою актуальность правила не потеряли.
Пусть клиент - часть приложения, с которой непосредственно взаимодействуют пользователи и которая распространяется путем доставки определенного ее экземпляра конечным пользователям. Например:
- Браузер (фронтенд в нем)
- Мобильное приложение
- Десктоп-приложение
Тогда можно сказать следующее:
1️⃣ Нельзя доверять тому, что пришло с клиента. Все валидации или проверки должны выполняться на бэкэнде
2️⃣ Нельзя хранить секреты на клиенте. Если секреты хранятся на клиенте, то нельзя их считать секретами
3️⃣ Нельзя выполнять запросы с аутентификацией к внешним API с клиента (следует из п. 2)
4️⃣ Нельзя полагаться на криптографию на клиенте для сокрытия данных от самого пользователя. Шифрование на клиенте имеет смысл только для защиты данных пользователя от бэкенда (здесь изменил исходную формулировку)
5️⃣ Никогда не доверяйте клиентской части «фильтрацию» лишних данных
Как считаете, справедлив ли такой список? Можно ли его чем-то дополнить?
Кстати, откопал и презентацию с того доклада. Подчистил от корпоративной символики и публикую ее здесь.
В ней в том числе есть ссылка на потрясающий материал про CSRF, где рассказывают про Cross-Site Request Forgery в стилистике Гарри Поттера : Defense Against the Dark Arts: CSRF Attacks.
Если никогда не читали, настоятельно рекомендую, подача очень крутая. Даже если и несколько устарел, базовые проблемы не изменились. Есть и перевод на русский.
#api #security
Какой громкий заголовок, да ведь? Несколько лет назад я читал в одной компании внутренний доклад "Разрабатываем и тестируем безопасные API", в нем как раз сформулировал тезисно, в виде правил то, что сам интуитивно всегда применял. Мир наш, быть может, и стал более современным, однако свою актуальность правила не потеряли.
Пусть клиент - часть приложения, с которой непосредственно взаимодействуют пользователи и которая распространяется путем доставки определенного ее экземпляра конечным пользователям. Например:
- Браузер (фронтенд в нем)
- Мобильное приложение
- Десктоп-приложение
Тогда можно сказать следующее:
1️⃣ Нельзя доверять тому, что пришло с клиента. Все валидации или проверки должны выполняться на бэкэнде
2️⃣ Нельзя хранить секреты на клиенте. Если секреты хранятся на клиенте, то нельзя их считать секретами
3️⃣ Нельзя выполнять запросы с аутентификацией к внешним API с клиента (следует из п. 2)
4️⃣ Нельзя полагаться на криптографию на клиенте для сокрытия данных от самого пользователя. Шифрование на клиенте имеет смысл только для защиты данных пользователя от бэкенда (здесь изменил исходную формулировку)
5️⃣ Никогда не доверяйте клиентской части «фильтрацию» лишних данных
Как считаете, справедлив ли такой список? Можно ли его чем-то дополнить?
Кстати, откопал и презентацию с того доклада. Подчистил от корпоративной символики и публикую ее здесь.
В ней в том числе есть ссылка на потрясающий материал про CSRF, где рассказывают про Cross-Site Request Forgery в стилистике Гарри Поттера : Defense Against the Dark Arts: CSRF Attacks.
Если никогда не читали, настоятельно рекомендую, подача очень крутая. Даже если и несколько устарел, базовые проблемы не изменились. Есть и перевод на русский.
#api #security
👍13🤔1
Что нового в мире защиты от CSRF
В продолжение прошлого поста, где упомянул в том числе и CSRF. Мне кажется, мы привыкаем, что для "типовых" задач принципиально новые решения не так и часто появляются. Поэтому особенно интересно обратить внимание на случай, когда позволяемый изменениями в технологиях подход встает сразу на одну ступень с аксакалами мира защиты от CSRF, основанными на токенах.
Еще сначала нужно отметить, что современные CSRF - они не всегда и cross-site, часто по привычке так называют и same-site cross-origin случаи (картинка для тех, кто хочет вспомнить различия между site и origin).
В конце прошлого года наткнулся на статью CSRF Protection without Tokens or Hidden Form Fields. Автор описывает, как в процессе изучения современных подходов к защите от CSRF для имплементации в своем веб-фреймворке он узнал про метод, основанный на Sec-Fetch-Site заголовке. А прочитав статью, узнать об этом можем и мы :)
Идея здесь следующая: все современные (современные, это важно) браузеры умеют отправлять специальный заголовок
-
-
-
-
Так мы можем определить отношения между origin, с которого происходит вызов и origin, куда запрос направляется. Главная штука в том, что на клиентской части ничего делать не нужно, браузер заголовок отправит сам, остается только проверять его на сервере. При этом возможно реализовать фоллбэк на какой-либо из классических подходов, если браузер в такие заголовки не сумел.
В декабре был обновлен и CSRF Prevention Cheat Sheet от OWASP, теперь рекомендации есть и там, причем после дискуссий, как понимаю, подняли применимость использования fetch metadata-заголовков до одной из основных мер, а не только как defense in depth. Но при этом подчеркивают, что механизм свежий и раскатывать нужно аккуратно и поглядывая на приборы. Ну и опять же учитывать, если ли у вас пользователи с более старыми версиями браузеров или нет.
На самом деле, мы можем увидеть, что гугл говорил о подобной возможности еще с 2019 года, вот, например, довольна ранняя публикация про fetch metadata. Но товарищ Safari не очень торопился поддержать fetch metadata-заголовки и сделал это только в 2023.
Интересно, если кто-то уже имплементировал работу с таким заголовком, какие еще могут быть нюансы и подводные камни?
#api #security
В продолжение прошлого поста, где упомянул в том числе и CSRF. Мне кажется, мы привыкаем, что для "типовых" задач принципиально новые решения не так и часто появляются. Поэтому особенно интересно обратить внимание на случай, когда позволяемый изменениями в технологиях подход встает сразу на одну ступень с аксакалами мира защиты от CSRF, основанными на токенах.
Еще сначала нужно отметить, что современные CSRF - они не всегда и cross-site, часто по привычке так называют и same-site cross-origin случаи (картинка для тех, кто хочет вспомнить различия между site и origin).
В конце прошлого года наткнулся на статью CSRF Protection without Tokens or Hidden Form Fields. Автор описывает, как в процессе изучения современных подходов к защите от CSRF для имплементации в своем веб-фреймворке он узнал про метод, основанный на Sec-Fetch-Site заголовке. А прочитав статью, узнать об этом можем и мы :)
Идея здесь следующая: все современные (современные, это важно) браузеры умеют отправлять специальный заголовок
Sec-Fetch-Site в запросах, причем значение этого заголовка не может быть задано клиентским JavaScript. Заголовок этот может принимать разные значения, а именно:-
same-origin-
same-site-
cross-site-
noneТак мы можем определить отношения между origin, с которого происходит вызов и origin, куда запрос направляется. Главная штука в том, что на клиентской части ничего делать не нужно, браузер заголовок отправит сам, остается только проверять его на сервере. При этом возможно реализовать фоллбэк на какой-либо из классических подходов, если браузер в такие заголовки не сумел.
В декабре был обновлен и CSRF Prevention Cheat Sheet от OWASP, теперь рекомендации есть и там, причем после дискуссий, как понимаю, подняли применимость использования fetch metadata-заголовков до одной из основных мер, а не только как defense in depth. Но при этом подчеркивают, что механизм свежий и раскатывать нужно аккуратно и поглядывая на приборы. Ну и опять же учитывать, если ли у вас пользователи с более старыми версиями браузеров или нет.
На самом деле, мы можем увидеть, что гугл говорил о подобной возможности еще с 2019 года, вот, например, довольна ранняя публикация про fetch metadata. Но товарищ Safari не очень торопился поддержать fetch metadata-заголовки и сделал это только в 2023.
Интересно, если кто-то уже имплементировал работу с таким заголовком, какие еще могут быть нюансы и подводные камни?
#api #security
👍9❤4🤔1