Help us shape the future of Go! Take the 2026 Go Developer Survey

iam

module
v0.0.37 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 21, 2026 License: MIT

README

iam

Servicio central de identidad, sesión SSO y RBAC para todos los proyectos de Velty. Reemplaza el patrón actual — cada app monta su propio tinywasm/auth + tinywasm/rbac contra su propia base — por un servicio único que las apps consumidoras llaman por HTTP.

Motor: usa tinywasm/user + tinywasm/auth + tinywasm/rbac sin modificarlas (son librerías genéricas ya publicadas, compartidas con cualquier otro consumidor del ecosistema). iam es la nueva raíz de composición que hoy vive duplicada — y desincronizada — en cada app: ver docs/ARCHITECTURE.md §1 para la evidencia concreta.

flowchart TD
    U[tinywasm/user] --> A[tinywasm/auth]
    U --> R[tinywasm/rbac]
    A --> I[veltylabs/iam]
    R --> I
    I -->|POST /api/token| M[misitio]
    I -->|POST /api/token| O[futuros proyectos Velty]

Uso desde otro proyecto

import iamclient "github.com/veltylabs/iam/client"

iam, err := iamclient.New(iamclient.ConfigFromEnv(ProjectID))
if err != nil { /* no arrancar */ }

r := edge.NewRouter(edge.Config{
    Authn:     iam.Authn(),
    Authorize: myPolicy(iam),   // política del proyecto, no de iam
})

iam entrega códigos de rol (Scope); el proyecto entrega la política. Consumer.AssignRole concede un rol en el proyecto del Consumer y es idempotente (un roleCode inexistente devuelve error: los roles se definen en el panel, no desde los consumidores). Los proyectos y sus claves públicas se administran desde el panel propio (/ en iam.velty.cl). Las aplicaciones consumidoras autentican sus llamadas máquina-a-máquina mediante private_key_jwt (RFC 7523) usando IAM_CLIENT_PRIVATE_KEY.

Variables de entorno

Variable Dónde Qué es
GOOGLE_CLIENT_ID Worker (Secret) Client ID de Google OAuth
GOOGLE_CLIENT_SECRET Worker (Secret) Client Secret de Google OAuth
GOOGLE_REDIRECT_URL Worker (Var) URL de callback (https://iam.velty.cl/oauth/callback/google)
JWT_SECRET Worker (Secret) Secreto para firma de tokens de autorización
IAM_PANEL_ORIGIN Worker (Var) Origen del panel (https://iam.velty.cl)
IAM_ADMIN_EMAILS Worker (Secret) Correos semilla con rol iam_admin
IAM_CLIENT_PRIVATE_KEY Consumidor (Secret) Clave privada P-256 para aserciones RFC 7523 del consumidor

Desarrollo local (sin credenciales)

El servidor local no necesita nada de Google ni de Cloudflare: usa identidades mock y base en memoria.

go run ./web            # http://localhost:8080 (o -server_port XXXX)
go test ./tests/...     # suite completa
GOOS=js GOARCH=wasm go build ./edge/ ./web/   # compuerta TinyGo

Abrí http://localhost:8080 y entrá con la identidad local (admin@iam.local — ya es administradora del panel, sin configurar IAM_ADMIN_EMAILS). El origen del panel en local es http://localhost:8080 por defecto. Verificado: /api/health responde {"ok":true}, /api/admin/me sin sesión da 403, y las respuestas llevan las seis cabeceras de seguridad.

Publicar

Checklist única y guiada en docs/DEPLOY.md a través de la pestaña DEPLOY en la aplicación webtyp (declarada en config/deploy.go).

Documentación

  • Arquitectura — por qué existe, límites de responsabilidad frente a site_manager, decisiones tomadas y lo que queda deliberadamente abierto.
  • Diseño — decisiones justificadas y alternativas descartadas (hoy: por qué client_secret y no un "token").

Estado

Motor de identidad+RBAC portado y con project_id nativo (Etapas 1-2). API Bearer con tokens de autorización por proyecto y cookie SSO entre *.velty.cl (Etapas 3-4) — todo ejecutado. veltylabs/misitio ya consume iam remotamente (dejó de montar su propio authority.Module/rbac.Service). Panel de administración completo (proyectos, lifecycle de client_secret, roles, usuarios y auditoría), servido por el mismo Worker con acceso controlado por IAM_ADMIN_EMAILS y transporte REST. El servicio pasó una auditoría de seguridad completa (open redirect, cabeceras, CSRF entre subdominios hermanos y auditoría de denegaciones) y la cadena de librerías compartidas aguas arriba se corrigió en sus propios repos.

Directories

Path Synopsis
cmd
keygen command
migrate command
Command migrate reconciles iam's database schema.
Command migrate reconciles iam's database schema.
modules

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL