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.
- 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 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.
- 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.
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.
- 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.
- 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
- 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 AcmeOlá de novo.
Usar uma chave-passeEnviar-me um código por e-mail - 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 - 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…
- 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
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
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.
# 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 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.