@chrono-os/sso-client
v0.1.1
Published
Cliente do Identity Provider central (login único): validar sessão, sign-in server-to-server e autorização por AppRole. Zero dependências de runtime.
Maintainers
Readme
@chrono-os/sso-client
Cliente do Identity Provider central (login único). Valida sessão do IdP, faz sign-in server-to-server e decide se o usuário tem papel neste app. Zero dependências de runtime (Node ≥ 18.17, fetch nativo).
Substitui o idp.ts que estava copiado em 11 backends, com três formas da mesma regra de autorização e duas assinaturas de idpSignIn.
import { createSsoClient } from '@chrono-os/sso-client'
export const sso = createSsoClient({
idpUrl: process.env.IDP_URL, // vazia = desligado (fork de parceiro)
appKeys: process.env.IDP_APP_KEY ?? 'legaris', // CSV ou array
publicOrigin: process.env.APP_PUBLIC_URL, // Origin confiável no sign-in
})
sso.enabled // IDP_URL presente?
await sso.verifySession(token) // { email, appRoles, user } | null
sso.isAuthorized(sessao.appRoles) // admin (ou *) neste app?
await sso.signIn(email, senha) // token | null
await sso.signInAndAuthorize(email, senha) // sessão autorizada | null- Nunca lança: rede fora, IdP fora, 401 e corpo estranho viram
null, para o app cair no login local em vez de devolver 500. - Log sem credencial: só status e tipo do erro; senha errada (401) não loga.
idpUrldefinida semappKeysfalha no boot, em vez de recusar todo login em silêncio.roles(default['admin']) define os papéis aceitos além do wildcard*.
Contrato do IdP: GET /api/v1/identity/session (Bearer) e POST /api/v1/auth/sign-in/email.
