Основные понятия
Несколько идей объясняют в Usher почти все: где что находится, кто выдает токены, где люди входят и сколько действует каждый токен.
Рабочие пространства, проекты и среды
- Рабочее пространство — это ваша команда или компания в Usher Console. Ему принадлежат участники и журнал аудита.
- Проект — это один продукт: ваше веб-приложение или партнерский портал. В рабочем пространстве их может быть много.
- Среда — это одна работающая копия проекта, обычно среда разработки (development) и рабочая среда (production). В средах находятся люди, приложения, ключи и настройки.
Рабочее пространство · Acme Ltd
Проект · Web
- development · wise-otter-42
- production · acme
Проект · Партнерский портал
- development · calm-heron-17
- production · acme-partners
У сред нет ничего общего там, где это важно. У каждой — собственная схема Postgres, собственные ключи подписи и собственные секреты, запечатанные ее собственным ключом данных. Человек, зарегистрировавшийся в среде разработки, не существует в рабочей среде, а токен из одной среды никогда не пройдет проверку ключами другой.
Администратор рабочего пространства может удалить проект в конце его страницы «Обзор», введя его название. Все среды проекта удаляются сразу: их люди, приложения, ключи и настройки, а также все сеансы и токены, которые они выдали. Их адреса перестают отвечать и больше никогда никому не выдаются, поэтому приложение, которое все еще доверяет одному из них, не обмануть чужим проектом.
Издатели
Каждая среда — отдельный издатель (issuer) OpenID Connect на собственном хосте в домене арендаторов:
https://<handle>.usherid.com- У рабочих сред — поддомен, который выбираете вы: от 3 до 32 строчных букв, цифр и одиночных дефисов, например название вашей компании. Однажды использованный поддомен больше никогда никому не выдается.
- Среды разработки получают случайный поддомен, например
wise-otter-42, который никто не примет за бренд.
Издатель задается при создании среды и больше не меняется, потому что каждый подписанный им токен указывает его в iss, а каждое доверяющее ему приложение проверяет это значение.
Домен арендаторов — это другой регистрируемый домен, не тот, что у самого Usher (usheridentity.com), поэтому страницы входа клиента никогда не находятся на одном сайте (same-site) с Usher Console, а cookie привязаны к хосту: браузер отправляет cookie среды только в эту среду.
Lobby
Lobby — это страница входа, которую каждая среда размещает у своего издателя. Ваше приложение отправляет туда людей; Lobby выполняет вход и возвращает их обратно.
- Lobby всегда называет приложение, в которое переходит человек, — в плашке «Переход в».
- Оно предлагает только те способы входа, которые разрешены в среде: ключи входа, коды из письма, ссылки для входа, аккаунты соцсетей (Google, GitHub, Microsoft, Apple) и пароли.
- Оно может требовать второй фактор: приложение для аутентификации (с резервными кодами) или ключ входа.
- Оно может быть открыто для всех или только для списка гостей из адресов и доменов.
Lobby выглядит одинаково, из какого бы продукта ни пришел человек. Это сделано намеренно: люди запоминают, как выглядит настоящее Lobby, и замечают, когда страница им не является.
Аккаунты Usher
В большинстве сред свои пользователи. Аккаунты Usher устроены иначе: это один аккаунт, с которым человек входит в любое приложение, где есть кнопка «Продолжить с Usher». Люди управляют своим аккаунтом на странице account.usheridentity.com.
Токены и сроки действия
| Токен | По умолчанию | Можно задать | Для чего он |
|---|---|---|---|
| Код авторизации | 5 минут | Не меняется | Один раз обменивается на токены. Одноразовый. |
| ID-токен | 10 минут | От 1 до 60 минут | Сообщает вашему приложению, кто вошел. Не для вызова API. |
| Токен доступа | 10 минут | От 1 до 60 минут | Отправляется в ваш API, который его проверяет. |
| Токен обновления | 30 дней | От 1 до 90 дней | Позволяет получать новые токены доступа. Меняется при каждом использовании. Нужна область offline_access. |
| Машинный токен доступа | 15 минут | От 1 до 60 минут | Для client_credentials: серверы, за которыми не стоит человек. |
| Код из письма, ссылка для входа | 10 минут | Не меняется | Для одного входа. На код дается три попытки. |
У сеансов в Lobby тоже есть сроки действия: сеанс заканчивается после 7 дней без использования (от 1 до 30) и в любом случае через 30 дней (от 1 до 90). Чтобы изменить что-то важное, например адрес e-mail, нужен вход, выполненный не более 10 минут назад.
Ключи подписи
По умолчанию токены подписываются алгоритмом RS256; вместо него среда может использовать ES256 или EdDSA. Открытые ключи публикуются по адресу jwks_uri среды, поэтому ваши библиотеки сами их загружают и подхватывают новые, когда ключи меняются.
Области доступа
| Область | Что получает ваше приложение |
|---|---|
openid | Обязательна. ID-токен с sub человека. |
profile | Имя и фото человека. |
email | Адрес e-mail человека и сведения о том, подтвержден ли он. |
offline_access | Токен обновления, чтобы вход сохранялся. |