К основному контенту

OAuth и слёзы

Недавно я перевёл свой проект с рельс ASP.NET MVC 3 на рельсы распоследней ASP.NET MVC 5. В статье я подробно описал как при этом использовать свои собственные таблицы БД и классы моделей, но остаться в рамках реализации стандартного механизма ASP.NET Identity. Одним из плюсов свежей версии я назвал поддержку OAuth 2.0 "из коробки". Однако, когда я дошёл до необходимости связывания MVC проекта с WebAPI встал вопрос о реализации аутентификации и авторизации пользователей. И здесь начались слёзы...

Я очень советую всем посмотреть недавно вышедший курс по безопасности в Web API 2.0: WebAPI 2.0 Security

Ссылку на скачивание с rutracker найдёте сами =). Это экспресс-курс, в котором описывается базовая настройка SSL, введение в основные виды аутентификации в ASP.NET, безопасность JavaScript клиентов, а также Token Based Authentication. Ну и конечно же описание проблем WebAPI 1.0 и решений этих проблем в WebAPI 2.0.

Однако, по ходу курса непременно затрагивается вопрос работы OAuth 2.0 и даётся ссылка на ещё один курс по Introduction to OAuth2, OpenID Connect and JSON Web Tokens (JWT), с которого я бы посоветовал вообще начать. Всё потому, что я узнал очень много нового об истории всех озвученных в названии протоколов, а также о текущем их состоянии.

Для кого-то может быть это и не новость, но я всё же напишу "для затравки": автор OAuth 1.0 Eran Hammer работал над его улучшением (версией 2.0) вместе с "большими дядями" вроде Google, но в конце концов вышел из комитета из-за полнейшего провала последнего. Ребята из Enterprise хотели одних фич, а ребята из Consumer- или Web- apps development хотели других, более легковесных приблуд. В итоге они не договорились и вместо нормальной спецификации получился какой-то разброд и шатание, к тому же ухудшившее безопасность протокола.

Понять как автор первой версии протокола ненавидит последнюю версию можно по этому видео, да и он там рассказывает о том, куда двигаться дальше.

Ещё очень интересно почитать его же авторские статьи "поглубже" о сути проблем:
oauth-2-0-without-signatures-is-bad-for-the-web
oauth-2-0-and-the-road-to-hel

Итогом фейла стало то, что все "большие дяди" имплементировали свои фишки, улучшающие безопасность протокола, который итак по сути должен быть безопасным. Таким образом, Facebook например, был взломан пару или тройку раз: Hacking-facebook-with-oauth2-and-chrome
How I Hacked Any Facebook Account...Again!

Как выразился сам Eran Hammer: OAuth 2.0 это дорога в ад.

Таким образом, весёлым заключением данной статьи является вот что: если вы собираетесь создавать более менее серьёзный сервис, то нужно сильно позаботиться об аутентификации, т.к. никто за вас этого не сделает. Стандартные шаблоны проектов от Microsoft лишь поверхностно решают этот вопрос. Автор курсов на PluralSight активно участвует в разработке Open-Source фреймворков для этого, и у него есть интересный блог, где он живо описывает все свои "приключения" и выкладывает новости о своих проектах.

Комментарии

Популярные сообщения из этого блога

Делаем себе бесплатный VPN на Amazon EC2

Читать этот пост в Telegraph. Другие посты в канале в Telegram. Кто только не расписывал уже пошаговые инструкции по этой теме. Однако, время идёт, ПО меняется, инструкции нуждаются в обновлении, а люди в современной России всё больше нуждаются в применении VPN. Я собираюсь описать все шаги для создания бесплатного сервера на Amazon EC2 с операционной системой Linux и необходимые команды для настройки VPN сервера на нём. Чтобы не повторяться о деталях, которые были много раз описаны на русскоязычных и англоязычных ресурсах, по ходу статьи я просто приведу целую кипу ссылок, где можно почерпнуть необходимую информацию, а где информация устарела - опишу подробнее что нужно сдеать. В итоге, сервер будет доступен для вас из любой точки планеты, с любой операционной системы, и бесплатно (с определёнными ограничениями по трафику). Шаг первый - Регистрируемся на Amazon AWS Нужно зайти на сайт https://aws.amazon.com/ru и сразу перейти к Регистрации, нажав одноимённую кнопку. При р

В помощь программисту: инструкции по работе с Ubuntu сервером

Программистам чаще приходится писать код и заботиться о его чистоте, правильных абстракциях в коде, корректных зависимостях и прочих сложностях профессии. При этом, настройка и обслуживание серверов, хоть и связанная область - это отдельный навык, необходимый не каждому, и помнить о котором в деталях сложно. Поэтому, я делаю ряд микро-инструкций, которыми буду пользоваться и сам, когда необходимо. Это не статьи, а пошаговые помощники, которые я буду дополнять и наполнять по мере надобности. Делаем бесплатный VPN на Amazon EC2 Создание ключей SSH Подключение к серверу через SSH Передача файла с Linux сервера наWindows машину Делаем VPN сервер на Ubuntu 20.04 используя OpenVPN и EasyRSA  Отображение GUI с Linux сервера на Windows машине

Выбираем все плюсы из трех парадигм Entity Framework

Между парадигмами разработки с Entity Framework (Code First, Model First, Database First) я выбрал промежуточную, потому что ни одна меня не устраивала полностью. В Code First меня радуют чистые POCO классы, но не устраивает невозможность моделирования базы. В Database First и Model First мне не нравится генерация EDMX и другого всего лишнего. Таким образом, я нашел для себя такое решение: 1. Я моделирую схему в любой удобной программе (тут любая внешняя программа моделирования, генерирующая SQL Server-совместимые скрипты генерации базы) Рис. Смоделированная схема БД. 2. Создаю базу в SQL Management Studio 3. Делаю Reverse Engineering базы в POCO классы (как в Code First) с помощью плагина Entity Framework Power Tools Рис. Установленный плагин для Reverse Engineer. Рис. Вот так делается Reverse Engineer базы данных в POCO классы. Рис. Результат генерации POCO классов на основе базы данных: папочка Models с готовым контекстом, классами объектов и маппинг-классами.