Saltar para o conteúdo

Identidade para as suas apps, com normas abertas

Faça favor de entrar.

Uma conta. Todas as portas.

O Usher Identity trata do início de sessão nas suas apps com OpenID Connect e OAuth 2.1: chaves-passe, 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 corre 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 aloja para a sua app. Diz sempre para onde a pessoa vai e tem o mesmo aspeto seja qual for a app que a enviou, para que as pessoas aprendam a confiar nela.

A continuar para
Tema
  • Indica sempre o produto para onde vai.
  • Chaves-passe, códigos por e-mail e ligações mágicas, com palavras-passe só se as quiser.
  • A mesma página tranquila, clara ou escura, em todos os produtos.

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

Usher IdentityUsher IdentityA continuar para Acme Notes

Olá de novo.

Inicie sessão com a sua conta Usher Identity.

Primeira vez?

Protegido por Usher Identity

Normas, sem amarras

Fala os protocolos que as suas ferramentas já conhecem.

O Usher Identity é, antes de mais, um fornecedor OpenID Connect. Use o nosso SDK quando lhe convier, ou qualquer biblioteca OIDC em qualquer linguagem. Se um dia sair, as suas apps não têm de mudar a forma como as pessoas iniciam sessão.

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

    OpenID Connect

    Um documento de descoberta por ambiente, tokens de ID e userinfo. Funciona com qualquer biblioteca cliente certificada.

  • Apenas S256

    OAuth 2.1 com PKCE

    Código de autorização com PKCE para todos os clientes, públicos ou confidenciais. Sem fluxo implícito, sem palavras-passe no endpoint de token.

  • RS256 · ES256 · EdDSA

    JWKS e rotação de chaves

    Cada ambiente assina com as suas próprias chaves, publicadas no seu jwks_uri. Faça a rotação sem interromper quem tem sessão iniciada.

  • RFC 7662 · RFC 7009

    Introspeção e revogação

    Pergunte se um token ainda é válido, ou termine-o já. O Usher Identity verifica as suas próprias sessões em cada pedido, por isso terminar uma tem efeito imediato.

  • Fim de sessão iniciado pela RP e por back-channel

    Termine a sessão a partir da sua app, ou peça ao Usher Identity que avise todas as apps quando uma sessão termina, seja onde for.

  • RFC 9449

    DPoP

    Associe os tokens a uma chave que o cliente detém, para que um token roubado não sirva de nada por si só.

  • WebAuthn

    Chaves-passe

    De raiz, não um acrescento. As pessoas iniciam sessão com a impressão digital, o rosto ou uma chave de segurança, e não há nada que se possa roubar por phishing.

  • TOTP

    Apps de autenticação

    Códigos baseados no tempo de qualquer autenticador, com códigos de recuperação. Torne o segundo fator opcional ou obrigatório.

  • Ligações mágicas

    Um toque a partir da caixa de entrada. De curta duração, de utilização única e associadas ao ambiente que as enviou.

  • Códigos por e-mail

    Seis dígitos, para quem inicia sessão num dispositivo e lê o e-mail noutro.

  • Início de sessão social

    Google, GitHub, Microsoft e Apple. Uma conta só é associada quando o respetivo e-mail foi comprovado.

  • Organizações e equipas

    Membros, funções e convites para as empresas que usam a sua app.

  • Brevemente

    SAML

    Início de sessão único com os fornecedores de identidade empresariais dos seus clientes.

  • Brevemente

    SCIM

    Aprovisionamento e desaprovisionamento a partir dos diretórios dos seus clientes.

Como funciona um início de sessão

Cinco passos, todos eles normalizados.

É o fluxo de código de autorização com PKCE do OpenID Connect, o mesmo que qualquer fornecedor de identidade sério fala. Desloque a página para o seguir passo a passo.

  1. 01

    A sua app encaminha a pessoa para o Lobby.

    Quando alguém escolhe Continuar com o Usher Identity, a sua app redireciona-a para o endpoint de autorização do seu ambiente, com um desafio PKCE e um valor de state que vai verificar mais tarde.

    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, à sua maneira.

    Uma chave-passe, um código por e-mail, uma ligação mágica, uma conta social ou uma palavra-passe: o Lobby oferece apenas o que o seu ambiente permite e diz sempre para que app a pessoa vai.

    Usher IdentityUsher IdentityA continuar para Acme

    Olá de novo.

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

    A pessoa aceita partilhar.

    Da primeira vez, as pessoas veem o que a sua app está a pedir (o perfil, o e-mail, manter a sessão iniciada) e aceitam uma única vez.

    Acme gostaria de:

    • Ver o seu nome e fotografia
    • 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 regressa ao seu URI de redirecionamento com um código de utilização única, válido durante cinco minutos, e com o state que enviou, que a sua app verifica.

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

    A sua app troca-o por tokens.

    O seu servidor envia o código e o verificador PKCE para o 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 de raiz

Cada ambiente é um edifício independente.

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

O seu próprio esquema Postgres
Não é uma coluna de inquilino numa tabela partilhada: é um esquema criado para o ambiente, sem mais nada lá dentro.
As suas próprias chaves de assinatura
Os tokens de um ambiente nunca podem ser validados com as chaves de outro.
Os seus próprios segredos selados
Selados com a chave de dados do próprio ambiente, que por sua vez é encapsulada por uma chave-mestra.
O seu próprio host
Os emissores ficam num domínio separado do site e da Console do Usher, com cookies restritos ao host.

usheridentity.com

O site, a Usher Identity Console, as contas Usher Identity

*.usherid.com

Um emissor por ambiente, num domínio separado

Ambiente

Os utilizadores, as sessões e os tokens ficam num esquema criado para este ambiente. As consultas correm nesse esquema, nunca numa tabela partilhada com uma coluna de inquilino.

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

Para programadores

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

Integre o SDK quando chegar, use a biblioteca OIDC em que já confia, ou comece por ler 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 />
}

Nos seus servidores

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 a sua própria base de dados.

  • Docker

    Um único ficheiro Compose: as apps, o Postgres, o Valkey, o Caddy à entrada e o proxy de saída. Os contentores correm sem novos privilégios e com as capacidades removidas.

  • Ubuntu

    Basta um simples servidor Ubuntu. O Caddy faz a terminação TLS, e os segredos são ficheiros entregues aos contentores, nunca incorporados nas imagens.

  • Postgres

    O Postgres guarda tudo, com um esquema por ambiente. Tanto ele como o Valkey ficam numa rede sem rota para a internet.

Numa cópia local 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 alojamento próprio está a caminho. Os comandos acima dão uma ideia de como será.

Faça entrar os seus utilizadores.

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

Inicie sessão uma vez. Boas-vindas em todo o lado.