Skip to main content
Esta guía acompaña a un integrador en la conexión de una plataforma con el IdP de B Brands. Se usa un ERP genérico como cliente de referencia (first-party), pero los pasos se generalizan a cualquier plataforma OIDC.
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).
La respuesta devuelve el 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>
URL base por entorno (issuer): Para la configuración manual (se muestran los valores de producción):
Usa un cliente distinto por entorno. Un token no productivo nunca debe ser válido en producción porque el iss difiere.
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

  1. Visita tu página de login — el botón “Iniciar sesión con B Brands” debería aparecer.
  2. Haz clic en él → deberías ser redirigido a …auth.bbrands.io/api/v3/oauth/authorize?….
  3. 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.
  4. 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.
Respuestas esperadas: 2xxdelivered; 4xxfailed (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.