Приглашение в SaaS: кому ссылка действительно даёт доступ
Безопасная ссылка приглашения сотрудника в SaaS должна вести к согласованной выдаче прав конкретному получателю в нужной организации. Для адресного приглашения нужно связать адрес получателя, подтверждённую учётную запись, организацию и роль. Владельцу продукта стоит проверить эту связь отдельно: письмо доставлено и сотрудник получил правильный доступ — разные результаты.
Что вы приглашаете сделать
Опишите назначение ссылки до выбора срока и внешнего вида письма. Адресное приглашение сотрудника, публичная ссылка вступления в сообщество и ссылка на заявку в организацию имеют разные ожидания. Если компания приглашает конкретного бухгалтера, случайный получатель пересланного письма не должен автоматически получать его полномочия. Для открытого вступления нужны отдельно согласованные правила.
Ниже разобрана предлагаемая модель адресного приглашения в рабочий сервис. Она не описывает обязательное поведение всех SaaS. Перед внедрением проверьте возможности выбранной платформы. Например, GitHub для приглашений в организацию по email связывает принятие с подтверждённым адресом личного аккаунта; инструкция отдельно исключает управляемые Enterprise-аккаунты. Это конкретное правило GitHub, не общий срок или порядок для остальных сервисов.
В интерфейсе покажите пользователю, в какую организацию его зовут и под какой учётной записью он продолжает. Если открыт другой аккаунт, предложите понятный выбор без выдачи чужих данных. Переключение вкладки браузера не должно незаметно менять получателя прав. Особенно полезно проверить этот сценарий у сотрудников, которые работают с несколькими компаниями.
Четыре связи в одном приглашении
- Получатель: кому предназначено адресное приглашение и каким способом подтверждён доступ к этому адресу.
- Учётная запись: кто фактически вошёл и принимает приглашение, включая уже существующего пользователя.
- Организация: чьи данные станут доступны после вступления, даже если названия компаний похожи.
- Роль: какие действия разрешены после принятия и кто имел право назначить их.
Само наличие токена в URL не объясняет всю эту модель. Условия нужно проверять в момент выдачи членства, а не только когда сформировали письмо. За время ожидания руководитель может отменить приглашение, изменить роль или потерять право приглашать в организацию. Разработчик должен заранее описать, какое состояние учитывается при окончательном подтверждении.
Принцип минимальных полномочий описан в OWASP Authorization Cheat Sheet. Для приглашения мы советуем применять его к роли будущего сотрудника и к действиям приглашающего. Право добавить оператора не должно автоматически означать право назначить владельца организации. Конкретную матрицу выбирает продукт, и её нужно согласовать отдельно.
Матрица приёмки адресного приглашения
Следующие строки — учебные условия проверки собственной разработки. Они формулируют желаемое поведение выбранной модели, а не подтверждают существование уязвимости в каком-либо сервисе. Используйте только согласованные тестовые учётные записи и организацию без рабочих клиентских данных.
| Ситуация | Кто открыл ссылку | Состояние приглашения | Ожидаемое решение в этой модели |
|---|---|---|---|
| Штатное вступление | Учётная запись с подтверждённым адресом получателя | Действует, организация и роль согласованы | После явного подтверждения создать нужное членство |
| Пересланное письмо | Другой пользователь | Действует | Не выдавать адресные права другому аккаунту |
| Отмена руководителем | Предназначенный получатель | Отозвано до принятия | Не выдавать доступ по старому приглашению |
| Повторное открытие | Уже вступивший сотрудник | Ранее принято | Не создавать дубли членства или дополнительные права |
| Изменение роли | Предназначенный получатель | Ожидает принятия, роль изменена | Применить заранее определённое правило и показать итоговую роль |
| Другая организация | Сотрудник нескольких компаний | Приглашение относится к новой компании | Создать только согласованную связь без переноса чужих данных |
Срок, отзыв и повторная отправка
Не выбирайте срок по случайной инструкции другого продукта. Укажите в требованиях, как долго приглашение действительно, кто может его отозвать и что происходит с прежней ссылкой после повторной отправки. Для длительно не принятого приглашения полезно показывать руководителю состояние, а не оставлять бессрочный неясный доступ в старой переписке.
Разделите отмену приглашения и удаление уже выданного членства. Если сотрудник успел вступить, изменение ожидающего приглашения не следует считать отзывом его действующих прав. Интерфейс должен показывать руководителю, какое именно действие доступно сейчас. Для жизненного цикла после увольнения есть отдельный разбор оставшихся токенов сотрудника.
Повторная отправка тоже требует понятной семантики. Это может быть напоминание о том же приглашении или выпуск нового с прекращением прежнего. Мы советуем выбрать один вариант, описать его и проверить. Нельзя принимать работу, если разработчик считает старую ссылку недействующей, а поддержка продолжает советовать сотрудникам открывать любое письмо из цепочки.
Как поставить задачу на реализацию
- Утвердите модель вступления: адресная, открытая или по заявке. Для адресной модели запишите способ подтверждения получателя и соответствие его учётной записи приглашённому адресу.
- Опишите права приглашающего и допустимые роли будущего участника. Укажите поведение при изменении полномочий до принятия.
- Определите состояния: ожидает, принято, отозвано, истекло. Отдельно опишите повторную отправку и повторное открытие старого URL.
- Подготовьте учебные сценарии из матрицы, включая другой аккаунт, несколько организаций и отзыв до подтверждения. Проверьте итоговые права в приложении, а не только текст страницы успеха.
- Согласуйте журнал событий без секретного URL: кто пригласил, в какую организацию, какую роль предложил и как завершилось принятие.
- Передайте поддержке правила сообщения об ошибке и восстановления нормального приглашения. Не предлагайте обходить отказ повышением роли или передачей аккаунта руководителя.
Просмотр страницы приглашения можно отделить от вступления. На ней показывают достаточно контекста для осознанного решения, но не открывают клиентскую базу до проверки условий доступа. Мы советуем отдельное подтверждение: человек должен понимать, к какой компании присоединяется. Предпросмотр ссылки и фоновое открытие адреса не стоит выбирать единственным признаком согласия пользователя.
Когда считать сценарий готовым
Оцените не только успешную доставку письма, но и конечную запись членства: правильные организация, пользователь и роль, отсутствие лишних связей. Для отказа проверьте, что система не выдала частичный доступ и не раскрыла закрытые сведения в сообщении. Для разрешённого сценария убедитесь, что сотрудник действительно способен выполнить свою рабочую задачу.
Если организация пользуется вторым фактором, включите её политику в приёмку, не придумывая одинаковых требований всем клиентам. Основы описаны в статье о внедрении двухфакторной аутентификации. Для проверки всей цепочки приглашения подойдёт аудит безопасности, а для разграничения арендаторов — аудит SaaS.
Результат приёмки удобно выразить одной записью по каждому сценарию: условия, подтверждённый аккаунт, организация, итоговая роль и наблюдение. Приглашение считается работающим, когда эти элементы совпали с требованиями. Красивое письмо с кнопкой не заменяет ни одного из них.
Вопросы и ответы
Что должна давать ссылка приглашения в рабочий сервис?
Это зависит от выбранной модели вступления. Для адресного приглашения сотрудника мы советуем выдавать только согласованную связь с организацией и ролью после подтверждения нужного получателя.
Что проверить, если ссылка приглашения содержит ошибку?
Уточните её состояние, предназначенный аккаунт и организацию, не пересылая секретный URL в открытый чат. Поддержка должна объяснить разрешённый следующий шаг, например новый выпуск приглашения, а не просить чужой пароль.
Что означает отозвать приглашение?
В модели адресного вступления это прекращение возможности получить права по ещё не принятому приглашению. Если участник уже вступил, его действующее членство и другие доступы нужно проверять отдельным действием.
Читайте также
Ссылка действовала час, но повторное скачивание уже запрещено: проверяем реальный срок доступа
БезопасностьСотрудника отключили в CRM, но доступ остался: как закрывать сессии, токены и общие секреты
БезопасностьПароли сотрудников: как навести порядок с доступами без боли
РазработкаБиллинг SaaS по сотрудникам: что считать оплачиваемым местом
РазработкаПробный период SaaS без автосписания: доступ после дедлайна
SaaSЛист ожидания занятий: приглашение ещё не означает запись