Die Bibliotheken, je eine Frage
Programme wie authnd und authn-bridge sind aus Modulen gebaut, die eigenständig veröffentlicht, versioniert und getestet werden. Jedes beantwortet eine Frage, und ein Programm importiert diejenigen, deren Fragen es stellt.
Alle sind reines Go und bauen mit CGO_ENABLED=0.
| Modul | die Frage, die es beantwortet | diese Seiten beschreiben | Importpfad |
|---|---|---|---|
| mfa | Haben genug Faktoren geantwortet, von genug Arten, und welche? | v0.5.0 | github.com/go-authn/mfa |
| totp | Stimmt dieser sechsstellige Code, und wurde er schon einmal verwendet? | v0.4.2 | github.com/go-authn/totp |
| fido | Wie spricht man mit einem Sicherheitsschlüssel, über 64-Byte-Reports? | v0.6.2 | github.com/go-authn/fido |
| keyfactor | Hat der registrierte Schlüssel geantwortet, und hat eine Person ihn berührt? | v0.4.2 | github.com/go-authn/keyfactor |
| directory | Wer ist jemand, und was kann das beweisen? | v0.14.0 | github.com/go-authn/directory |
| ldap | Was sind die Bytes eines LDAP-Servers? | v0.8.0 | github.com/go-authn/ldap |
| krb5 | Taugt dieses Kerberos-Ticket für diesen Dienst? | v0.3.1 | github.com/go-authn/krb5 |
| kdc | Wie stellt ein Realm Tickets aus einem Verzeichnis aus? | v0.4.3 | github.com/go-authn/kdc |
| oidc | Wer fragt laut diesem Bearer-Token, und sollte man ihm glauben? | v0.4.1 | github.com/go-authn/oidc |
| saml | Was hat der Identitätsanbieter einer Föderation über diese Person gesagt? | v0.4.1 | github.com/go-authn/saml |
| krl | Ist dieses SSH-Zertifikat oder dieser Schlüssel widerrufen, so wie sshd antworten würde? | v0.6.1 | github.com/go-authn/krl |
| servercert | Woher kommt das TLS-Serverzertifikat eines Daemons? | v0.5.2 | github.com/go-authn/servercert |
| wireguard | Darf dieser WireGuard-Schlüssel sich verbinden, und wem gehört er? | v0.1.1 | github.com/go-authn/wireguard |
Wie sie sich gruppieren
Faktoren – ob eine Person anwesend ist. mfa entscheidet, wie viel Nachweis genug ist, und kennt kein Gerät. totp ist ein Faktor: ein Code von einem Telefon. fido spricht CTAP mit einem Sicherheitsschlüssel und kennt keine Richtlinie; keyfactor ist das eine Stück, das beide importiert und aus einem Schlüssel einen Faktor macht.
Das Verzeichnis und sein Protokoll. directory ist das Modell: eine Person und welche Anmeldedaten eine Quelle für sie hält – ein Passwort, ein NT-Hash, ein Verifier, SSH-Schlüssel, ein Geheimnis für Einmalcodes – und, getrennt davon, die Attribute, die sie beschreiben und nichts beweisen. ldap ist das LDAP-Leitungsprotokoll, als Server, und das Verzeichnisschema, gegen das ein Eintrag geprüft werden kann; was es antwortet, ist Sache des Handlers.
Kerberos, in zwei Hälften. krb5 nimmt Tickets an: eine Keytab, ein AP-REQ herein, ein AP-REP hinaus. kdc stellt sie aus, aus einem Verzeichnis, das Passwörter hält.
Föderation und Tokens. saml ist ein SAML-2.0-Service-Provider vor einer Föderation wie RENATER oder eduGAIN. oidc prüft die OpenID-Connect-Tokens, die ein Anbieter signiert – die Hälfte des Resource-Servers, ohne Anmeldeablauf.
Widerruf und Zertifikate. krl liest, schreibt und prüft OpenSSH-Sperrlisten für Schlüssel. servercert gibt einem Daemon sein TLS-Zertifikat, aus Dateien oder über ACME.
wireguard überträgt die signierte Liste der öffentlichen WireGuard-Schlüssel, die Personen bei einem Anbieter registriert haben und die ein Gateway in Peers umwandelt.
Warum sie getrennte Module sind
Ein Dienst, der nur Tickets annimmt, bindet nie einen KDC ein. Ein NFS-Server prüft die Tickets, die ein Client vorlegt; er hat eine Keytab und sonst nichts mit einem Realm zu tun. Wären Annehmen und Ausstellen ein Modul, trüge jeder solche Server einen Codepfad zum Ausstellen von Tickets mit sich, den er nie ausführt, und das Verzeichnismodul, aus dem ein KDC Personen liest und das er nie benutzt.
Das ist gemessen, nicht beabsichtigt. In einem Wegwerfmodul, das nur
github.com/go-authn/krb5@v0.3.1 importiert:
$ GOWORK=off go list -deps . | grep go-authn
github.com/go-authn/krb5
$ GOWORK=off go list -m all | grep go-authn
github.com/go-authn/krb5 v0.3.1Derselbe Befehl für ein Modul, das github.com/go-authn/kdc@v0.4.3 importiert,
listet github.com/go-authn/directory und github.com/go-authn/kdc auf: Das Ausstellen
braucht die Personen, das Annehmen nicht.
Dieselbe Regel gilt auch anderswo. mfa importiert nichts außerhalb der Standardbibliothek,
und fido importiert mfa nicht: Ein Programm, das nur einen
Schlüssel blinken lassen will, trägt kein Richtlinienpaket mit sich. totp hängt nur von mfa ab, und
oidc hat überhaupt keine Abhängigkeit. directory hält seine LDAP-, SQL- und HCL-Quellen
in Unterpaketen: Das Kernpaket importiert nichts außerhalb der Standardbibliothek,
und sqldir nimmt eine *sql.DB, sodass der Datenbanktreiber die Wahl des
Programms ist.
Jede Seite hat dieselben Teile
Die Frage; die go get-Zeile für die beschriebene Version; ein minimales Beispiel,
das gegen diese Version kompiliert; was das Modul ablehnt, aus seinem Code;
und wogegen es geprüft wird – die Implementierung, die nicht diese ist,
benannt in seiner CI oder seinen Tests. Wo eine README und der Code sich widersprechen, folgt die Seite
dem Code.
Erstellt am von tannevaled
Geändert am von tannevaled