Перейти к содержимому

Вход в ваши приложения на открытых стандартах

Проводит вас внутрь.

Один аккаунт. Все двери.

Usher Identity впускает людей в ваши приложения по OpenID Connect и OAuth 2.1: ключи входа, коды, вход через соцсети и организации, а каждая среда отделена от всех остальных.

Начать можно бесплатно. Работает и на ваших собственных серверах.

Lobby

Страница входа, которая встречает, а не допрашивает.

Lobby — это страница входа, которую Usher Identity размещает для вашего приложения. Она всегда показывает, куда направляется человек, и выглядит одинаково, из какого бы приложения он ни пришел, поэтому люди учатся ей доверять.

Переход в
Тема
  • Каждый раз называет продукт, в который вы переходите.
  • Ключи входа, коды из письма и ссылки для входа, а пароли — только если вы их хотите.
  • Одна и та же спокойная страница, светлая или темная, в каждом продукте.

Это рабочая копия Lobby. Она работает прямо на этой странице, ничего не отправляет и никого не впускает.

Usher IdentityUsher IdentityПереход в Acme Notes

С возвращением.

Войдите с аккаунтом Usher Identity.

Впервые здесь?

Под защитой Usher Identity

Стандарты, а не привязка

Говорит на языке протоколов, который ваш стек уже знает.

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 — тот самый, на котором работает любой серьезный поставщик удостоверений. Прокрутите страницу, чтобы пройти его шаг за шагом.

  1. 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
  2. 02

    Человек входит так, как ему удобно.

    Ключ входа, код из письма, ссылка для входа, аккаунт в соцсети или пароль: Lobby предлагает только то, что разрешено в вашей среде, и всегда показывает, в какое приложение человек переходит.

    Usher IdentityUsher IdentityПереход в Acme

    С возвращением.

    Использовать ключ входа
    Прислать код на e-mail
  3. 03

    Человек соглашается поделиться данными.

    В первый раз человек видит, что запрашивает ваше приложение (профиль, e-mail, сохранение входа), и дает согласие один раз.

    Acme запрашивает разрешение:

    • Видеть ваше имя и фото
    • Видеть ваш адрес e-mail
    • Сохранять ваш вход
    ОтменитьРазрешить
  4. 04

    Usher Identity возвращает код.

    Браузер возвращается на ваш URI перенаправления с одноразовым кодом, который действует пять минут, и с отправленным вами значением state, которое ваше приложение проверяет.

    302 Found
    Location: https://app.acme.example/callback
      ?code=SplxlOBeZQQYbYS6WxSbIA
      &state=k3Jx…
  5. 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 · app/page.tsxПоявится вместе с SDK
// 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 находятся в сети, из которой нет маршрута в интернет.

В клоне репозитория Usher Identity
# 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.

Войдите один раз — и вам рады везде.