Вход в ваши приложения на открытых стандартах
Проводит вас внутрь.
Один аккаунт. Все двери.
Usher Identity впускает людей в ваши приложения по OpenID Connect и OAuth 2.1: ключи входа, коды, вход через соцсети и организации, а каждая среда отделена от всех остальных.
Начать можно бесплатно. Работает и на ваших собственных серверах.
- OpenID Connect
- OAuth 2.1
- PKCE
- WebAuthn
- JWKS
- DPoP
- TOTP
Lobby
Страница входа, которая встречает, а не допрашивает.
Lobby — это страница входа, которую Usher Identity размещает для вашего приложения. Она всегда показывает, куда направляется человек, и выглядит одинаково, из какого бы приложения он ни пришел, поэтому люди учатся ей доверять.
- Каждый раз называет продукт, в который вы переходите.
- Ключи входа, коды из письма и ссылки для входа, а пароли — только если вы их хотите.
- Одна и та же спокойная страница, светлая или темная, в каждом продукте.
Это рабочая копия Lobby. Она работает прямо на этой странице, ничего не отправляет и никого не впускает.
Стандарты, а не привязка
Говорит на языке протоколов, который ваш стек уже знает.
Usher Identity — прежде всего провайдер OpenID Connect. Используйте наш SDK, когда это удобно, или любую библиотеку OIDC на любом языке. Если вы когда-нибудь уйдете, вашим приложениям не придется менять то, как в них входят пользователи.
- OIDC Core · Discovery
OpenID Connect
Документ обнаружения для каждой среды, ID-токены и userinfo. Подойдет любая сертифицированная клиентская библиотека.
- Только S256
OAuth 2.1 с PKCE
Код авторизации с PKCE для каждого клиента, публичного или конфиденциального. Никакого неявного потока и никаких паролей в конечной точке токенов.
- RS256 · ES256 · EdDSA
JWKS и ротация ключей
Каждая среда подписывает токены своими ключами, опубликованными по ее jwks_uri. Меняйте их, не прерывая вход пользователей.
- RFC 7662 · RFC 7009
Интроспекция и отзыв
Узнайте, действителен ли еще токен, или отзовите его прямо сейчас. Usher Identity проверяет свои сеансы при каждом запросе, поэтому завершенный сеанс заканчивается сразу.
Выход по инициативе приложения и по обратному каналу
Выходите из своего приложения или поручите Usher Identity сообщать всем приложениям, когда сеанс где-то завершается.
- RFC 9449
DPoP
Привязывайте токены к ключу, который хранится у клиента, — тогда украденный токен сам по себе бесполезен.
- WebAuthn
Ключи входа
Полноценная функция, а не дополнение. Люди входят по отпечатку пальца, лицу или ключу безопасности, и фишингу здесь не за что зацепиться.
- TOTP
Приложения для аутентификации
Коды, меняющиеся со временем, из любого приложения для аутентификации, с резервными кодами. Второй фактор может быть необязательным или обязательным.
Ссылки для входа
Вход одним касанием прямо из почты. Ссылки живут недолго, срабатывают один раз и привязаны к среде, которая их отправила.
Коды из письма
Шесть цифр — для тех, кто входит на одном устройстве, а почту читает на другом.
Вход через соцсети
Google, GitHub, Microsoft и Apple. Аккаунт связывается, только если его e-mail подтвержден.
Организации и команды
Участники, роли и приглашения для компаний, которые пользуются вашим приложением.
- Скоро
SAML
Единый вход через корпоративных поставщиков удостоверений ваших клиентов.
- Скоро
SCIM
Автоматическое создание и удаление пользователей из каталогов ваших клиентов.
Как устроен вход
Пять шагов, и каждый — по стандарту.
Это поток кода авторизации OpenID Connect с PKCE — тот самый, на котором работает любой серьезный поставщик удостоверений. Прокрутите страницу, чтобы пройти его шаг за шагом.
- 01
Ваше приложение отправляет человека в Lobby.
Когда человек выбирает «Продолжить с Usher Identity», ваше приложение перенаправляет его на конечную точку авторизации вашей среды — с challenge PKCE и значением state, которое оно потом проверит.
GET acme.usherid.com/api/auth/oauth2/authorize ?response_type=code &client_id=acme_web &redirect_uri=https://app.acme.example/callback &scope=openid profile email offline_access &state=k3Jx… &code_challenge=E9Mel…cM &code_challenge_method=S256
- 02
Человек входит так, как ему удобно.
Ключ входа, код из письма, ссылка для входа, аккаунт в соцсети или пароль: Lobby предлагает только то, что разрешено в вашей среде, и всегда показывает, в какое приложение человек переходит.
Usher IdentityUsher IdentityПереход в AcmeС возвращением.
Использовать ключ входаПрислать код на e-mail - 03
Человек соглашается поделиться данными.
В первый раз человек видит, что запрашивает ваше приложение (профиль, e-mail, сохранение входа), и дает согласие один раз.
Acme запрашивает разрешение:
- Видеть ваше имя и фото
- Видеть ваш адрес e-mail
- Сохранять ваш вход
ОтменитьРазрешить - 04
Usher Identity возвращает код.
Браузер возвращается на ваш URI перенаправления с одноразовым кодом, который действует пять минут, и с отправленным вами значением state, которое ваше приложение проверяет.
302 Found Location: https://app.acme.example/callback ?code=SplxlOBeZQQYbYS6WxSbIA &state=k3Jx…
- 05
Ваше приложение обменивает код на токены.
Ваш сервер отправляет код и верификатор PKCE на конечную точку токенов. В ответ приходят ID-токен, который говорит, кто этот человек, токен доступа для вашего API и токен обновления, чтобы вход сохранялся.
POST acme.usherid.com/api/auth/oauth2/token grant_type=authorization_code&code=Splx… &code_verifier=dBjftJeZ4CVP… { "token_type": "Bearer", "access_token": "eyJhbGciOiJSUzI1NiIs…", "id_token": "eyJhbGciOiJSUzI1NiIs…", "refresh_token": "8xLOxBtZp8…", "expires_in": 600 }
Изоляция в основе
Каждая среда — отдельное здание.
Ваши рабочие среды и среды разработки, как и среды всех остальных клиентов, не делят ничего важного. Ошибка в одной не позволит прочитать данные другой, подписать что-то от ее имени или войти в нее.
- Собственная схема Postgres
- Не столбец арендатора в общей таблице, а схема, созданная для этой среды, и больше в ней ничего нет.
- Собственные ключи подписи
- Токены одной среды никогда не пройдут проверку ключами другой.
- Собственные запечатанные секреты
- Они запечатаны собственным ключом данных среды, который, в свою очередь, зашифрован мастер-ключом.
- Собственный хост
- Издатели находятся на отдельном домене, а не там, где сайт Usher и Console, и используют cookie, привязанные к своему хосту.
usheridentity.com
Сайт, Usher Identity Console, аккаунты Usher Identity
*.usherid.com
По издателю на каждую среду, на отдельном домене
Пользователи, сеансы и токены хранятся в схеме, созданной для этой среды. Запросы выполняются в этой схеме и никогда — в общей таблице со столбцом арендатора.
Скопировать запечатанный секрет клиента Google из рабочей среды проекта Acme в рабочую среду проекта Northwind.
Для разработчиков
Первый вход — тремя способами.
Подключите SDK, когда он выйдет, возьмите библиотеку OIDC, которой уже доверяете, или начните с документа обнаружения. В основе везде один и тот же протокол.
// app/layout.tsx
import { UsherProvider } from '@usher/nextjs'
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en">
<body>
<UsherProvider>{children}</UsherProvider>
</body>
</html>
)
}
// app/page.tsx
import { SignIn, UserButton, currentUser } from '@usher/nextjs'
export default async function Page() {
const user = await currentUser()
return user ? <UserButton /> : <SignIn />
}На своих серверах
Ваши серверы, ваши ключи.
Пользуйтесь Usher Identity как сервисом или запустите ту же платформу на своих серверах — со своими ключами и своей базой данных.
Docker
Один файл Compose: приложения, Postgres, Valkey, граничный сервер Caddy и исходящий прокси. Контейнеры запускаются без повышения привилегий и с отключенными capabilities.
Ubuntu
Достаточно обычного сервера Ubuntu. Caddy завершает TLS, а секреты передаются контейнерам в виде файлов и никогда не вшиваются в образы.
Postgres
Postgres хранит все данные, по одной схеме на среду. Он и Valkey находятся в сети, из которой нет маршрута в интернет.
# on an Ubuntu server with Docker Engine and the Compose plugin
bash infra/scripts/setup-env.sh --prod \
--domain usher.example --tenant-domain usherid.example
docker compose -f compose.yaml -f compose.prod.yaml \
--profile core --profile apps --profile edge up -d --wait
pnpm db:migrate # applies the database migrationsПолное руководство по размещению на своих серверах уже готовится. Команды выше показывают, как это будет выглядеть.
Проводите пользователей внутрь.
Создайте рабочее пространство и проект, и первая среда сразу получит своего издателя, свои ключи и свое Lobby.
Войдите один раз — и вам рады везде.