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.
- OpenID Connect
- OAuth 2.1
- PKCE
- WebAuthn
- JWKS
- DPoP
- TOTP
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.
- 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.
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.
- 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.
- 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
- 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 AcmeQue bom ver você de novo.
Usar uma chave-senhaEnviar um código por e-mail - 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 - 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…
- 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
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
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.
# 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 migrationsO 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.