В шутке «Почини утюг, ты ж программист» много горькой правды: не все люди знают, из чего состоит работа программиста и чем он занят в течение рабочего дня. Поэтому сегодня мы проведём вас за кулисы агентства и расскажем о труде разработчика на примере одной задачи. Надеемся, будет интересно нашим коллегам или тем, кто думает сменить профессию на что-то в сфере диджитал!
Предыстория
В прошлом году мы начали выходить на крупных клиентов, в том числе из-за рубежа. И один контракт, которым мы особенно гордимся — разработка карьерного сайта для крупного ритейлера. Называть его в статье мы не будем, но если вы пролистаете наш блог, то поймёте, о ком мы!
Карьерный сайт — это интернет-ресурс, где компания может разместить свои вакансии, анкеты, тестовые задания и всё, что будет интересно и полезно будущим соискателем. Это альтернатива профилю компании на Headhunter, и если карьерный сайт сделан хорошо, он гораздо удобнее и дешевле. Ведь за размещение на Hh работодатели платят немало, а функционал этого сайта удобен не всем.
Мы разрабатывали картерный сайт, который был частью другого, более крупного, сайта — корпоративного портала нашего заказчика. Это ещё больше осложняло нашу задачу. И одной из проблем, которую предстояло решить, была авторизация.
Представьте, что вы строите пристрой для отеля, в котором используется «умная» система пропусков. Она распознаёт лица и впускет посетителей туда, куда у них есть право доступа: в комнаты, лобби, помещения для персонала и т.д. Но в вашей пристройке вы должны сделать свою пропускную систему. Как сделать так, чтобы людям не пришлось носить с собой дополнительные ключи? Ведь это очень неудобно!
Решения
Плохое решение: сделать на нашем портале отдельную систему авторизации и добавлять учетные записи пользователей параллельно на наш и на «большой» сайт. Это легко реализовать, но потом возникнет много проблем у администраторов порталов: придется делать две учётки; удалять их, если человек уволился; синхронно редактировать обе записи, если данные изменятся, и т.д. Конечно, это приведёт к большому количеству «мёртвых» записей и рассинхронизации данных.
Хорошее решение: настроить авторизацию так, чтобы а) данные на нашей части не хранились б) роли на обоих сайтах интегрировались. Это сложнее в реализации, но избавляет администраторов и поддержку сайта от многих проблем.
Мы пошли по сложному пути и нашли решение: интегрировать карьерный портал с Microsoft Active Directory. Этим занимались фронтенд-разработчики.
Как это должно работать:
- пользователь заходит на карьерный портал
- происходит редирект на страницу авторизации в Active Directory
- пользователь авторизуется в AD
- AD перенаправляет пользователя обратно на портал, возвращает нам его роль и часть персональных данных: имя, фамилия и e-mail.
- Готово! Пользователь получает доступ в систему, личный кабинет и админку сайта.
Всю интеграцию мы сделали на front-end, что позволило нам не хранить пользовательские данные в базе (только роли). При такой схеме роли пользователей на портале интегрируются с ролями, которые есть в AD, и пользователи автоматически получают доступ к системе согласно правам, определённым в ролях. Как оказалось, всё придумано для нас: существует готовое решение для такой интеграции. Его нужно было установить и настроить.
Комментарий разработчика
Артур, full stack разработчик:
— Я использовал NPM-пакет “View Adal”. В работе с Node.js пакетами называют один или несколько JavaScript-файлов, представляющих собой какую-то библиотеку или инструмент. Таких библиотек существует много, под различные решения.
Чтобы реализовать интеграцию нашего портала с Microsoft Active Directory, мы зарегистрировали приложение в Azure сайта и прописали адрес, откуда разрешено запрашивать данные.
Пример: допустим, у пользователя роль «ректурер». В системе у каждого пользователя есть свой хеш. Мы заводим пользователя в нашей системе как рекрутера и вставляем этот хэш. Мапим эти роли. И интегрируем системы, чтобы они обменивались данными. Поэтому пользователь будет обозначен как рекрутер в обеих системах.
Все данные хранятся в ENV (переменных средах). Мы прописали переменные, которые приложение подтягивает и использует.
В пакете уже есть все функции, которые нужны для интеграции, и задача разработчика — установить его и настроить. Единственное, что нужно сделать на back-end — это роли. Но они относятся уже не к аутентификации, а авторизации, и определяют возможности пользователей.
Почему авторизация через AD — это удобно?
В крупной компании централизованное хранилище облегчает работу и поддержку системы. А при увольнении сотрудника — позволяет быстро удалить его данные: одним действием можно закрыть доступ ко всем проектам компании.
С помощью интеграции пользователь может авторизоваться на карьерном портале с тем же логином и паролем, что и на «большом» сайте, и получить те же права. Если бы интеграции с AD не было, пришлось бы вручную создавать каждому из них по две учетки, и у каждого пользователя было бы два пароля и логина.
Мы сделали всё оперативно и для маленького проекта, хотя подобные решения чаще используются для крупных порталов. Отметим, что масштабировать решение под небольшой проект оказалось достаточно легко, и все ресурсы сейчас работают нормально.
А ещё мы недавно рассказывали про профессию UX-дизайнера. Почитай, если ищешь себя в диджитал!