diff --git a/Readme.md b/Readme.md index f055c77..b0064af 100644 --- a/Readme.md +++ b/Readme.md @@ -22,15 +22,44 @@ Im Gegensatz zum [Main-Branch][main], der keine DB-Abhängigkeiten enthält, Leider werden durch die SQLite-Bibliothek weitere Transitive Abhängigkeiten eingebunden, die das JAR ein wenig aufblähen. +## Motivation + +Natürlich gibt es freie Implementierungen des OIDC-Protokolls. +Der Platzhirsch auf dem Open-Source-Markt dürfte wohl [Keycloak] sein. +Allerdings ist Keykloak alles andere als einfach zu konfigurieren und dürfte wohl für viele Nutzer deutlich mehr Features als Ballast mitbringen, als eigentlich benötigt werden. + +Deshalb war das Ziel hier: + +* kein [Feature-Creep](https://datei.wiki/definition/die-grundlagen-des-feature-creep/) +* kein NodeJS – und damit keine Dependency-Hölle +* Platformunabhängig dank Java +* erweiterbar +* verschlüsselte Datenbank + ## bauen Dies ist ein Gradle-Project. Um es zu compilieren brauchen Sie ein aktuelles Java-Development-Kit. Das Projekt kann durch Aufruf von `./gradlew build` in einem Terminal innerhalb des Wurzelverzeichnisses gebaut werden. -## Datenbank-Unterstützung +## Backends + +Im Main-Branch ist kein Datenbank-Backend enthalten. +Alle Einstellungen werden in einer JSON-Datei gespeichert, wobei eine Verschlüsselung einfach konfiguriert werden kann. +Dieses Setup sollte für kleine und mittlere Instanzen reichen. + +### Datenbank-Unterstützung Um das Projekt klein zu halten ist im _main_-Branch kein Datenbank-Support eingebaut. Es gibt aber einen separaten Branch, der die Benutzung von SQLite-Datenbanken untersützt: [sqlite] + +Die Anbindung an andere Datenbanksysteme ist möglich, im Moment aber noch nicht implementiert. + +### andere Backends + +Aufgrund der Architektur des OIDC-Providers sollte es jederzeit möglich sein weitere Backends, wie z.B. LDAP anzubinden. +Dies ist aber im Moment noch nicht implementiert – und wird wohl erst auf Nachfrage implementiert werden. + + This aims to be a [specification] compliant OpenID connect provider with minimal footprint. @@ -47,19 +76,47 @@ While the [main] branch does not contain any dependencies for database support, Unfortunately the SQLite library also draws in some additional dependencies, which – to a certain extend – increases the size of the compiled JAR archive. +## Motivation + +Of course, there are plenty other implementations of the OIDC protocol. +The most well-known open source OIDC provider might be [Keycloak]. +However, that piece of software called Keycloak is really heavy duty, hard to configure and bloated with features the most users won`t need. + +Thus, the goal for LightOIDC was: + +* don`t be a feature creep +* don`t use NodeJS – avoid the dependency hell +* be platform neutral by using Java +* be extensible +* allow data to be encrypted + ## build This is a gradle project. To compile it, you should have a recent version of a Java Development Kit installed. Build the roject by launching `./gradlew build` in a terminal while being in the root folder of the project. -## database support +## backends + +In the main branch, there ist no database backend. +Alle preferences and data are stored in a JSON file, allowing for easy encryption of data. +This setup should be fine for small and medium instances. + +### database support In order to achieve a minimal footprint, no database support is incorporated in the main branch. However, there is SQLite support in a separate branch: [sqlite] +Utilizing other databases should be possible, but has not been implemented, yet. + +### other backends + +LightOIDCs architecture shout allow integration other backends, like LDAP, without a hazzle. +However, this is not implemented yet – work will have to be done on demand! + [main]: ../main +[Keycloak]: https://www.keycloak.org/ [specification]: https://openid.net/specs/openid-connect-core-1_0.html diff --git a/de.srsoftware.oidc.app/build.gradle.kts b/de.srsoftware.oidc.app/build.gradle.kts index 2d8d703..68a0f5d 100644 --- a/de.srsoftware.oidc.app/build.gradle.kts +++ b/de.srsoftware.oidc.app/build.gradle.kts @@ -1,5 +1,9 @@ description = "SRSoftware OIDC: app" +plugins { + java +} + dependencies{ implementation("org.json:json:20240303") implementation("org.xerial:sqlite-jdbc:3.46.0.0") @@ -13,4 +17,14 @@ dependencies{ implementation(project(":de.srsoftware.oidc.datastore.file")) implementation(project(":de.srsoftware.oidc.datastore.sqlite")) implementation(project(":de.srsoftware.oidc.web")) +} + +tasks.jar { + manifest.attributes["Main-Class"] = "de.srsoftware.oidc.app.Application" + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + val dependencies = configurations + .runtimeClasspath + .get() + .map(::zipTree) // OR .map { zipTree(it) } + from(dependencies) } \ No newline at end of file diff --git a/de.srsoftware.oidc.backend/src/main/java/de/srsoftware/oidc/backend/ClientController.java b/de.srsoftware.oidc.backend/src/main/java/de/srsoftware/oidc/backend/ClientController.java index 0f1f0da..a9902ae 100644 --- a/de.srsoftware.oidc.backend/src/main/java/de/srsoftware/oidc/backend/ClientController.java +++ b/de.srsoftware.oidc.backend/src/main/java/de/srsoftware/oidc/backend/ClientController.java @@ -169,7 +169,7 @@ public class ClientController extends Controller { .stream() .map(clients::getClient) .flatMap(Optional::stream) - .sorted(Comparator.comparing(Client::name)) + .sorted(Comparator.comparing(Client::name, String.CASE_INSENSITIVE_ORDER)) .map(Client::safeMap) .toList(); return sendContent(ex, Map.of(AUTHORZED, authorizedClients, NAME, user.realName())); diff --git a/de.srsoftware.oidc.web/src/main/resources/de/authorization.html b/de.srsoftware.oidc.web/src/main/resources/de/authorization.html index bbdafd1..ebf4a91 100644 --- a/de.srsoftware.oidc.web/src/main/resources/de/authorization.html +++ b/de.srsoftware.oidc.web/src/main/resources/de/authorization.html @@ -10,6 +10,7 @@ +

Prüfe Berechtigung…