El IdP autentica a tus usuarios. Tu plataforma gestiona su propia
autorización (roles/grupos). El IdP nunca envía roles ni permisos.
Resumen de la integración
1. Registra el cliente OAuth (lado B Brands)
Crea el cliente vía la consola de administración de identidad o la management API. Registra un cliente distinto por entorno (<platform>-dev, <platform>-cert,
<platform>-prod).
client_secret y el secreto del webhook de provisioning
una sola vez — guárdalos en tu secret manager. Luego habilita usuarios piloto:
2. Configura el cliente (lado de tu plataforma)
Usando el soporte OIDC de tu plataforma, apunta la autoconfiguración al discovery y proporciona Client ID + Secret:- URL de discovery:
https://auth.bbrands.io/.well-known/openid-configuration - Client ID:
<UUID devuelto en el onboarding> - Client Secret:
<el que devolvió el IdP>
Para la configuración manual (se muestran los valores de producción):
Valida el token de acceso (issuer
auth.*, aud = bbrands-idp,
https://bbrands.io/client_handle = tu handle) como la aserción de identidad.
El id_token se firma con la misma clave ES256 pero conserva el issuer
interno del motor, así que no fijes la verificación de issuer de tu librería a él — consulta
Endpoints.Si tu librería OIDC solo valida id_tokens RS256 (p. ej. Odoo 18 con el
módulo OCA
auth_oidc): solicita que tu cliente se registre con
id_token_alg: "RS256". Tu id_token se entrega entonces firmado como
RS256 (kid resoluble vía la JWKS URL de arriba, mismos claims), sin cambios
de tu lado más allá de la configuración estándar. El token de acceso sigue
siendo ES256.Valida la configuración
- Visita tu página de login — el botón “Iniciar sesión con B Brands” debería aparecer.
- Haz clic en él → deberías ser redirigido a
…auth.bbrands.io/api/v3/oauth/authorize?…. - Tras
authorize, el navegador se redirige a…auth.bbrands.io/oauth/consent?…(mismo origen) y, sin una sesión, primero al login de B Brands. - Con una sesión de B Brands activa y un usuario habilitado → autoaprobación → de vuelta a tu plataforma, con sesión iniciada.
3. Mapeo de identidad
En cada login, busca al usuario por (
provider, id externo = sub). Comportamiento
recomendado cuando no se encuentra: rechazar con “solicita acceso a tu administrador” (los usuarios
deben estar aprovisionados previamente). La alternativa JIT (autocrear) es solo para flujos
donde la pre-sincronización es imposible.
Tanto el access token como la respuesta de UserInfo incluyen el objeto
https://bbrands.io/profile: account es la cuenta de B Brands vinculada al
usuario mediante el rol primary_user, odoo es el id del sistema externo de
esa cuenta (null hasta que la API de migración la mapee) y user es igual a
sub. Úsalo para enlazar el login con tu propio registro de cliente sin
llamadas adicionales a la API.4. Webhook de provisioning
Expón un endpoint que el IdP llama cuando el acceso cambia. Verifica la firma HMAC, luego crea/actualiza o desactiva al usuario. Asigna tus propios grupos — el IdP no envía roles.Payload del webhook
Headers:X-BBrands-Signature (HMAC-SHA256 en hex del cuerpo),
X-BBrands-Event-Id, X-BBrands-Delivery-Attempt.
2xx → delivered; 4xx → failed (sin reintento, p. ej. firma
inválida); 5xx/timeout → reintento con backoff exponencial, luego dead_letter + alerta
al administrador. Usa event_id para la idempotencia frente a los reintentos.
5. Consumo de las APIs de B Brands (con usuario)
Cuando actúas en el contexto de un usuario con sesión iniciada, intercambia el token OIDC por un JWT interno de B Brands y úsalo como Bearer. Detalles y manejo de errores en Intercambio de tokens.6. Máquina a máquina
Un cron de sincronización nocturna no tiene un usuario interactivo, así que no usa OAuth ni el exchange. Usa una API key existente de B Brands, aprovisionada con least privilege.7. Casos límite
8. Checklist de puesta en producción
1
Módulo instalado
Módulo de integración instalado en producción.
2
Proveedor OIDC probado
Proveedor configurado y verificado en staging.
3
Secretos almacenados
Secreto del webhook y client secret almacenados cifrados.
4
API key aprovisionada
Para el cron, con permisos mínimos.
5
Exchange probado
OIDC → JWT interno probado para los flujos con contexto de usuario.
6
Política de grupos definida
La política de asignación de grupos de tu plataforma está definida.
7
Lista de pre-provisioning validada
Lista de usuarios validada con Personas/RR. HH.
8
Runbooks y alertas
Runbook de “No puedo autenticarme” publicado; alertas de webhook/login configuradas.