RAMBO
RAMBO steht für Rights, Accounts, Multi-factor, Bearer tokens & OAuth. Es ist ein Anmeldedienst und OpenID Provider, geschrieben in Hilde mit Wolly. RAMBO dient den Projekten rund um Hilde und übernimmt die Anmeldung per OAuth und OpenID für Gitea. Quelltext: github.com/heikozim/hilde-rambo. Grundlage sind github.com/heikozim/hilde-wolly und github.com/heikozim/hilde.
Von Go zu Hilde
Das erste RAMBO, go-rambo, war in Go geschrieben: ein OpenID Provider für eine feste Liste eigener Werkzeuge, als FastCGI hinter Hiawatha, gebaut für OpenBSD. An Go ist nichts falsch, und go-rambo hat seinen Zweck erfüllt. Die Hilde-Version behält alles bei, was eine angebundene Anwendung sieht: dieselben Endpunkte, Claims, Token-Header, Cookie-Namen, Konfigurationsschlüssel und dieselbe Kommandozeile. Sie liest die Daten von go-rambo unverändert: das SQLite-Schema, die gepfefferten Argon2id-Hashes, die versiegelten TOTP-Geheimnisse und den Vault.
Was die Hilde-Version neu mitbringt, verdankt sie Hilde:
- Verträge: Jede öffentliche Funktion nennt ihren Vertrag, und die Prüfläufe achten darauf.
- Lineare Typen: Jeder Wert, der eine Ressource hält, muss genau einmal beendet werden. RAMBO hat kein einziges unsafe-Modul.
- ML-DSA-44: Tokens werden mit ML-DSA-44 signiert (JWK-Typ AKP) oder mit der zusammengesetzten Signatur aus ML-DSA-44 und Ed25519, je nach Client. RSA wird nicht angeboten. Unter OpenBSD kommt ML-DSA aus libcrux, ohne OpenSSL.
- Passkeys: Anmeldung ohne vorherige Eingabe eines Namens (Discoverable Credentials), mit ES256 und EdDSA. Nach einer frischen Anmeldung lassen sich Passkeys auf der Kontoseite verwalten. Auf der Kommandozeile kann man sie auflisten und widerrufen.
Keine Benutzerverwaltung im Browser
Die Benutzerverwaltung läuft bewusst nur über die Kommandozeile: Konten, Clients, Rollen, Sitzungen und Schlüssel. Die Weboberfläche hat keine Admin-Seiten, nur die eigene Kontoseite jedes Benutzers. Die Befehle sind dieselben wie bei go-rambo (serve, setup, account, client, role, session, keys rotate, version), und wo ein Skript die Ausgabe auswerten könnte, ist sie Wort für Wort dieselbe. Hilfe und Aufrufsyntax kommen aus Standard.Arguments, das sich an der Builder-Form von clap orientiert. Die Kommandozeile von go-rambo war mit cobra gebaut.
Betrieb
RAMBO läuft als FastCGI auf einem Unix-Socket hinter Hiawatha. Das Repository enthält die Konfiguration für Hiawatha und die Skripte für den Umstieg von go-rambo unter OpenBSD. Audit-Einträge schreibt RAMBO ins Systemprotokoll, und es schränkt sich selbst mit der Sandbox von Hilde ein.