Gitea como proveedor OAuth2

Como os conté en la entrada sobre Drone, llevo ya un tiempo utilizando Gitea como mi servidor Git personal. En dicha entrada, mencioné el tema de OAuth2 por encima para indicar cómo conectar Drone con Gitea. Pero recientemente, jugando con Cloudflare y sus múltiples opciones para securizar algunos de los servicios que tengo expuestos, descubrí que Gitea puede servirme como proveedor de autenticación en algunos casos, en lugar de necesitar disponer de usuarios y contraseñas por todas partes.

¿Qué es un proveedor OAuth2?

Empecemos por el principio. Según se puede ver en la Wikipedia:

OAuth permite a un usuario del sitio A (proveedor de servicio) compartir su información con el sitio B (llamado consumidor) sin compartir toda su identidad. Para desarrolladores de consumidores, OAuth es un método de interactuar con datos protegidos y publicarlos. Para desarrolladores de proveedores de servicio, OAuth proporciona a los usuarios un acceso a sus datos al mismo tiempo que protege las credenciales de su cuenta.

OAuth2 no es más que la versión 2 de dicho protocolo. Nos permite acceder a aplicaciones y webs sin necesidad de crear un usuario, pues utilizamos el que ya tenemos en dicho proveedor para iniciar sesión (en el caso que nos ocupa, nuestro servidor Gitea).

Ejemplo: Crear un acceso OAuth2 para Cloudflare

En este tutorial, enlazaremos nuestro Dashboard de Cloudflare con nuestra cuenta de Gitea, con el fin de poder logarnos sin necesidad de usuario y contraseña.

Añadir un método de login

Para ello, el primer paso será entra en nuestra cuenta de Cloudflare. Una vez dentro, nos iremos al apartado de Zero Trust y, dentro de él, a Settings y seleccionaremos General. Veremos que ahí podemos definir o editar nuestro Team domain, que necesitaremos más adelante. Pondremos uno que nos sea fácil de recordar, que nos guste y que esté libre.

Pantalla de configuración general de Zero Trust

Después, volviendo a la pantalla de Settings, haremos clic esta vez en Authentication. En la ventana que nos carga veremos que tenemos el apartado de Login methods, y crearemos uno nuevo haciendo clic en Add new.

Apartado de autenticación en Cloudflare Zero Trust

De la lista que nos sale, seleccionaremos OpenID connect. Se nos abrirá una ventana de configuración que, a su vez, nos indica las instrucciones para ello.

Configuración de un método OIDC en Cloudflare Zero Trust

De momento, dejaremos esta ventana abierta y, en una nueva, nos iremos a nuestro repositorio de Gitea para continuar con el siguiente paso.

Crear una nueva aplicación OAuth2 en Gitea

Una vez logados en nuestro servidor de Gitea, en la configuración de nuestro usuario, iremos a la pestaña de Aplicaciones. En ella veremos cómo, en la parte de abajo, tenemos un cuadro de diálogo similar a:

Cuadro de diálogo de Gitea para crear una aplicación OAuth2

Introduciremos un nombre para la aplicación que nos permita distinguirlo del resto que podamos tener, y una URL de redireccionamiento. Dicha URL suele ser proporcionada por el servicio que queremos configurar. Como vimos en el paso anterior, será: https://<ORGANIZACION>.cloudflareaccess.com/cdn-cgi/access/callback. Deberemos reemplazar <ORGANIZACION> por el nombre de la organización que tengamos, y deberemos apuntarnos tanto el ID de cliente como el secreto. Es importante que apuntemos en algún lado el secreto, ya que éste no se volverá a mostrar y lo necesitaremos en el paso siguiente.

Crear el método de login

Volviendo a nuestra cuenta de Cloudflare, que dejamos en la ventana de configuración, le daremos un nombre que nos sea reconocible (por ejemplo, Gitea OIDC), y rellenaremos los campos con la siguiente información (reemplazando URL_GITEA por la URL donde tengas tu servidor de Gitea):

Campo Valor
App ID ID de cliente de Gitea App
Client secret Secreto de cliente de Gitea App
Auth URL https://URL_GITEA/login/oauth/authorize
Token URL https://URL_GITEA/login/oauth/access_token
Certificate URL https://URL_GITEA/login/oauth/keys

El resto de la configuración (Proof Key for Code Exchange y OIDC Claims) podemos dejarlos tal cual están, y le damos a Save. Esto nos llevará de nuevo a la pantalla de Authentication y veremos que nos aparece en la lista de Login methods.

Pantalla de autenticación con el login de Gitea creado

Si pulsamos sobre el botón de Test y lo hemos hecho todo bien, deberíamos ver algo como lo siguiente:

Resultado del test de login

Crear una política de acceso

Si el test anterior nos sale OK, podremos pasar al siguiente paso. En la pantalla de Authentication haremos clic sobre el botón de Manage en la sección de App Launcher, y en la pestaña de Rules añadiremos una nueva política de acceso pulsando el botón Add a rule.

Pantalla de creación de reglas de acceso para App Launcher

Deberemos darle un nombre reconocible a nuestra política (por ejemplo, OIDC Launcher), y le diremos que esta regla lo que hará será permitir las conexiones (Allow). En Include agregaremos el selector de Login methods y seleccionaremos el que hemos creado en los pasos anteriores (OpenID Connect - Gitea OIDC). Al pulsar sobre Save se nos guardará la política y nos aparecerá listada en la lista de la imagen anterior.

Si sellecionamos la pestaña de Authentication, podremos elegir qué métodos de login vamos a permitir. Como en este caso sólo queremos permitir el acceso por Gitea, seleccionaremos sólo esta opción, desmarcando Accept all available identity providers.

Probar la autenticación

En principio tenemos todo configurado, así que es hora de hacer la prueba. Accedemos a la URL de nuestro dashboard de Cloudflare (que, como vimos pasos atrás, será algo como https://<ORGANIZACION>.cloudflareaccess.com/) y nos aparecerá una pantalla similar a la siguiente:

Pantalla de login del dashboard de Cloudflare

Al pulsar sobre el botón de Login seremos redirigidos a la pantalla de selección de método de login, donde veremos los métodos que hemos autorizado (en nuestro caso, sólo el de Gitea).

Pantalla de selección de método de login

Al pulsar sobre la opción de OIDC seremos llevados a nuestro servidor de Gitea para hacer login. Si no tuviéramos la sesión iniciada en dicho sistema, veremos la pantalla de acceso, pero si ya la tenemos iniciada, automáticamente seremos llevados a nuestro dashboard de Cloudflare, habiendo completado así el inicio de sesión. En la imagen siguiente os muestro un ejemplo del mío, donde combino acceso a servicios que tengo dados de alta como algunos enlaces externos que no dependen de Cloudflare, siendo una versión bastante simplificada de otras opciones que tengo en local, como en el caso de Homer, siendo ésta destinada a accesos desde el exterior de mi LAN y sólo para un subconjunto de ellos. Cómo crear este dashboard es algo que explicaré en una futura entrada.

Dashboard de Cloudflare con algunas aplicaciones añadidas

Y con esto tendríamos configurado un acceso OAuth2 con nuestro servidor de Gitea. La guía se puede aplicar a otros servicios, con la salvedad de que hay que saber qué URL de redireccionamiento o callback URL necesitamos poner en la aplicación de Gitea. En cuanto a las políticas creadas, las podemos aplicar también sobre servicios y aplicaciones individuales dentro de Cloudflare, con lo que podemos securizar algunos servicios, además de limitar accesos por IP, país... Pero eso lo dejamos para otra ocasión.

Si te ha gustado la entrada, o te ha sido útil y quieres ayudarme a pagar los gastos que conlleva el servidor y mantener así el blog libre completamente de anuncios, puedes hacer una donación en Bitcoin en la siguiente dirección: