Auth: GitHub OAuth, Keycloak/OIDC y RBAC
|
Objetivos del capítulo
|
Identidad: quién entra al restaurante
Una IDP sin auth es un restaurante sin maître: cualquiera entra y nadie sabe a quién cobrarle. Necesitamos saber quién es cada developer (autenticación) y qué puede hacer (autorización). Backstage soporta OAuth/OIDC y RBAC.
Flujo OAuth/OIDC
GitHub OAuth (desarrollo)
Para development, GitHub OAuth es lo más rápido:
auth:
providers:
github:
development:
clientId: ${AUTH_GITHUB_CLIENT_ID}
clientSecret: ${AUTH_GITHUB_CLIENT_SECRET}
signIn:
resolver: emailLocalPartMatchingUserEntityName
|
Nunca pegues secrets en el repo
|
|
Sobre el callback
El callback es :code:`http://localhost:7007/auth/github/handler/development`. GitHub lo registra como OAuth app. En producción es :code:`https://idp.tuempresa.com/auth/github/handler`. |
Keycloak/OIDC (laboratorio y producción)
Para una instalación seria, Keycloak te da SSO, MFA, grupos y proveedores federados.
keycloak:
production:
issuerUrl: ${KEYCLOAK_ISSUER_URL}
clientId: ${KEYCLOAK_CLIENT_ID}
clientSecret: ${KEYCLOAK_CLIENT_SECRET}
signIn:
resolver: oidcEmailLocalPartMatchingUserEntityName
|
Por qué Keycloak y no GitHub en producción
|
Sign-in resolvers
El signIn.resolver mapea el usuario autenticado a una entidad User del catalog. Sin esto, no hay identidad útil.
|
Resolvers comunes
|
|
Buena práctica
En producción, crea un User en el catalog por cada developer que se loguee, con su |
RBAC con permission-backend
El plugin @backstage/plugin-permission-backend aplica políticas de autorización. Lo registras como un módulo del backend:
permission:
rbac:
policies:
- name: platform-can-register-production
policy: |
permission=permission.catalog.entity.create
effect=allow
condition=isPlatformTeam
|
¿Qué cubre RBAC?
No cubre: acceso a endpoints HTTP. Para eso, el endpoint usa |
Cómo se aplica en el cliente
Una vez configurado, el frontend oculta botones según los permisos del usuario. La página /settings lista tus roles efectivos.
-
Crea una GitHub OAuth app y registra el callback.
-
Configura el provider en
auth.providers.github. -
Añade un
signIn.resolverpara mapear a User. -
Para producción, monta Keycloak y configura el provider OIDC.
-
Define políticas RBAC en
permission.rbac.policies.
Resumen
-
Auth = OAuth/OIDC + sign-in resolver + User entity en el catalog.
-
GitHub OAuth vale para dev; Keycloak vale para producción.
-
RBAC aplica políticas declarativas sobre acciones y recursos.
-
output.visible: falsey secretos fuera del repo son obligatorios.
Glosario del capítulo
- OAuth
-
Protocolo de delegación de autorización (GitHub, Google, etc.).
- OIDC
-
Capa de identidad sobre OAuth 2.0 (OpenID Connect).
- IdP
-
Identity Provider. Servicio que autentica al usuario (GitHub, Keycloak, Okta).
- signIn.resolver
-
Función que mapea el usuario autenticado a una entidad User.
- RBAC
-
Role-Based Access Control. Modelo "allow/deny" sobre acciones y recursos.
- PermissionPolicy
-
Función TypeScript que evalúa si una acción está permitida.
Próximo capítulo
Backstage en producción —despliegue con Docker Compose y kind, monitoring, y métricas de éxito.