Pular para o conteúdo

Identidade para os seus apps, com padrões abertos

Convida você a entrar.

Uma conta. Todas as portas.

O Usher Identity cuida do início de sessão nos seus apps com OpenID Connect e OAuth 2.1: chaves-senha, códigos, início de sessão social e organizações, com cada ambiente separado de todos os outros.

Grátis para começar. Também roda nos seus próprios servidores.

O Lobby

Uma página de início de sessão que acolhe, em vez de interrogar.

O Lobby é a página de início de sessão que o Usher Identity hospeda para o seu app. Ele sempre diz para onde a pessoa está indo e tem a mesma aparência seja qual for o app que a enviou, então as pessoas aprendem a confiar nele.

Continuando para
Tema
  • Mostra o nome do produto para onde você vai, sempre.
  • Chaves-senha, códigos por e-mail e links mágicos, com senhas só se você quiser.
  • A mesma página tranquila, clara ou escura, em todos os produtos.

Esta é uma cópia funcional do Lobby. Ela roda nesta página, não envia nada e não inicia a sessão de ninguém.

Usher IdentityUsher IdentityContinuando para Acme Notes

Que bom ver você de novo.

Inicie sessão com a sua conta Usher Identity.

Primeira vez aqui?

Protegido pelo Usher Identity

Padrões, sem amarras

Fala os protocolos que a sua stack já conhece.

O Usher Identity é, antes de tudo, um provedor OpenID Connect. Use o nosso SDK quando for conveniente, ou qualquer biblioteca OIDC em qualquer linguagem. Se um dia você sair, os seus apps não precisam mudar a forma como as pessoas iniciam sessão neles.

Tokens de atualização, consentimento e escopos incluídos.
  • OIDC Core · Discovery

    OpenID Connect

    Um documento de descoberta por ambiente, tokens de ID e userinfo. Qualquer biblioteca de cliente certificada funciona.

  • Somente S256

    OAuth 2.1 com PKCE

    Código de autorização com PKCE para todo cliente, público ou confidencial. Sem fluxo implícito e sem senhas no endpoint de token.

  • RS256 · ES256 · EdDSA

    JWKS e rotação de chaves

    Cada ambiente assina com as próprias chaves, publicadas no seu jwks_uri. Faça a rotação sem derrubar a sessão de quem já entrou.

  • RFC 7662 · RFC 7009

    Introspecção e revogação

    Pergunte se um token ainda é válido ou encerre-o agora. O Usher Identity verifica as próprias sessões a cada requisição, então encerrar uma delas tem efeito imediato.

  • Logout iniciado pela RP e por back-channel

    Finalize a sessão a partir do seu app, ou deixe o Usher Identity avisar todos os apps quando uma sessão terminar em qualquer lugar.

  • RFC 9449

    DPoP

    Vincule os tokens a uma chave que o cliente guarda, para que um token roubado não sirva para nada sozinho.

  • WebAuthn

    Chaves-senha

    Recurso de primeira classe, não um complemento. As pessoas iniciam sessão com a digital, o rosto ou uma chave de segurança, e não há nada que um phishing possa roubar.

  • TOTP

    Apps de autenticação

    Códigos baseados em tempo de qualquer app de autenticação, com códigos de backup. Torne o segundo fator opcional ou obrigatório.

  • Links mágicos

    Um toque a partir da caixa de entrada. De curta duração, de uso único e vinculados ao ambiente que os enviou.

  • Códigos por e-mail

    Seis dígitos, para quem inicia sessão em um dispositivo e lê os e-mails em outro.

  • Início de sessão social

    Google, GitHub, Microsoft e Apple. Uma conta só é vinculada depois que o e-mail dela é comprovado.

  • Organizações e equipes

    Membros, funções e convites para as empresas que usam o seu app.

  • Em breve

    SAML

    Single sign-on com os provedores de identidade corporativos dos seus clientes.

  • Em breve

    SCIM

    Provisionamento e desprovisionamento a partir dos diretórios dos seus clientes.

Como funciona um início de sessão

Cinco etapas, todas elas padrão.

Este é o fluxo de código de autorização com PKCE do OpenID Connect, o mesmo fluxo que todo provedor de identidade sério usa. Role a página para acompanhar.

  1. 01

    Seu app leva a pessoa ao Lobby.

    Quando alguém escolhe Continuar com o Usher Identity, o seu app redireciona a pessoa para o endpoint de autorização do seu ambiente, com um desafio PKCE e um valor de estado que ele vai conferir depois.

    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

    A pessoa inicia sessão do jeito dela.

    Uma chave-senha, um código por e-mail, um link mágico, uma conta social ou uma senha: o Lobby oferece só o que o seu ambiente permite e sempre diz para qual app a pessoa está indo.

    Usher IdentityUsher IdentityContinuando para Acme

    Que bom ver você de novo.

    Usar uma chave-senha
    Enviar um código por e-mail
  3. 03

    A pessoa concorda em compartilhar.

    Na primeira vez, a pessoa vê o que o seu app está pedindo (o perfil, o e-mail, manter a sessão iniciada) e concorda uma única vez.

    Acme gostaria de:

    • Ver o seu nome e a sua foto
    • Ver o seu endereço de e-mail
    • Manter a sua sessão iniciada
    CancelarPermitir
  4. 04

    O Usher Identity devolve um código.

    O navegador volta para a sua URI de redirecionamento com um código de uso único, válido por cinco minutos, e o estado que você enviou, que o seu app confere.

    302 Found
    Location: https://app.acme.example/callback
      ?code=SplxlOBeZQQYbYS6WxSbIA
      &state=k3Jx…
  5. 05

    Seu app troca o código por tokens.

    O seu servidor envia o código e o verificador PKCE ao endpoint de token. Em troca, recebe um token de ID que diz quem é a pessoa, um token de acesso para a sua API e um token de atualização para manter a sessão iniciada.

    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
    }

Isolamento desde a concepção

Cada ambiente é um prédio independente.

Os seus ambientes de produção e de desenvolvimento, e os de todos os outros clientes, não compartilham nada que importe. Um erro em um deles não consegue ler outro, assinar por ele nem iniciar sessão nele.

Schema Postgres próprio
Não uma coluna de locatário em uma tabela compartilhada: um schema feito para o ambiente, e nada mais nele.
Chaves de assinatura próprias
Os tokens de um ambiente nunca podem ser verificados com as chaves de outro.
Segredos selados próprios
Selados com a chave de dados do próprio ambiente, que por sua vez é envolvida por uma chave mestra.
Host próprio
Os emissores ficam em um domínio separado do site e do Console do Usher, com cookies restritos ao host.

usheridentity.com

O site, o Usher Identity Console e as contas Usher Identity

*.usherid.com

Um emissor por ambiente, em um domínio separado

Ambiente

Usuários, sessões e tokens ficam em um schema feito para este ambiente. As consultas são executadas nesse schema, nunca em uma tabela compartilhada com uma coluna de locatário.

Copiar o segredo de cliente do Google selado de Acme em produção para Northwind em produção.

Para desenvolvedores

Seu primeiro início de sessão, de três formas.

Adicione o SDK quando ele chegar, use a biblioteca OIDC em que você já confia ou comece lendo o documento de descoberta. Por baixo, é tudo o mesmo protocolo.

app/layout.tsx · app/page.tsxChega com o 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 />
}

Hospede você mesmo

Os seus servidores, as suas chaves.

Use o Usher Identity como serviço ou execute a mesma plataforma nos seus próprios servidores, com as suas próprias chaves e o seu próprio banco de dados.

  • Docker

    Um único arquivo Compose: os apps, o Postgres, o Valkey, a borda Caddy e o proxy de saída. Os contêineres rodam sem novos privilégios e com as capacidades do Linux removidas.

  • Ubuntu

    Basta um servidor Ubuntu comum. O Caddy faz a terminação TLS, e os segredos são arquivos entregues aos contêineres, nunca embutidos nas imagens.

  • Postgres

    O Postgres guarda tudo, com um schema por ambiente. Ele e o Valkey ficam em uma rede sem rota para a internet.

A partir de um clone do 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

O guia completo de hospedagem própria está a caminho. Os comandos acima dão uma ideia de como ele vai ser.

Convide os seus usuários a entrar.

Crie um espaço de trabalho e um projeto, e o seu primeiro ambiente já vem com o próprio emissor, as próprias chaves e o próprio Lobby.

Inicie sessão uma vez. Sinta-se em casa em todo lugar.