Die Entwicklung von MITREid Connect ist im Jahr 2011 als Forschungprojekt von der MITRE Corporation gestartet worden. Das Framework baut auf OAuth 2.0, ist von beginn an Open Source entwickelt worden und steht untder der Apache 2.0 Lizenz. Die neueste Version unterstützt den Proof Key for Code Exchange kurz PKCE. Durch PKCE macht die Bereitstellung von mobilen Anwendungen sicherer. Es werden die S256-Hash-basierte Brechnung als auch die Klartext-Version von PKGE unterstützt, wobei S256 bevorzugt wird. Der große Vorteil von MITREid ist die Modulare Benutzeroberlfäche. Es kann fast alles ausgetauscht werden, um sie benutzerdefinierte Funkionalitäten zu ersetzten. MITREid hat neben ausführlicher Dokumentation auch einen Issue Tracker sowie eine Mailing List vorzuweisen. Ein Branch für X.509 Zertifikate ist vorhanden.


Installationsdokumentation

Verwendete Programme

  • IntelliJ IDEA ULTIMATE 2017.2
  • Java SDK 8
  • Sourcetree Version 2.5.5.0
  • Apache Maven 3.5.2

 

Projekt auschecken

git clone https://github.com/mitreid-connect/OpenID-Connect-Java-Spring-Server.git

 

Projekt Layout

Der Projektordner sollte folgende Ordner beinahlten:

OpenID-Connect-Java-Spring-Server   +-- openid-connect-common   +-- openid-connect-client   +-- openid-connect-server   +-- openid-connect-server-webapp

Openid-connect-common, openid-connect-client, openid-connect-server und openid-connect-server-webapp werden jeweils als einzelne Maven Submodule verwaltet. Der Stamm des Projekts enthält eine pom.xml-Datei, die auf alle Untermodule verweist. Die meisten Maven-Befehle sollten von diesem übergeordneten Projekt ausgeführt werden. 

 

Kompilieren mit Maven

Das Projekt kann über die Console oder auch über IntelliJ gebaut werden.

 

Variante 1:

Die Server-Webanwendung kann mithilfe einer eingebetteten Jetty-Instanz mittels Maven bereitgestellt werden. Zur Bereitstellung auf Jetty muss zuerst die folgende Anwendung in dem übergeordneten Projektverzeichnis ausgeführt werden:

mvn clean install

Um den eingebetteten Jetty-Server auszuführen und die Server-Webanwendung bereitzustellen muss im Verzeichnis openid-connect-server-webapp folgendes ausgeführt werden:

mvn jetty:run-war

Damit die WebApp bspw. unter Linux im Hintergrund läuft kann folgender Befehl ausgeführt werden. Zudem wird die Ausgabe in output wegeschrieben sowie der stderr.

mvn jetty:run-war > output.log 2>&1 & disown

Mit folgenden Befehl kann der Benutzer den Port 8080 für außen öffnen. Zuvor muss der Benutzer jedoch in der Server-Configuration unter openid-connect-server-webapp/src/main/webapp/WEB-INF/ die Adresse von Localhost ändern.

sudo ufw allow 8080/tcp

Nachdem der Port geöffnet worden ist kann man mit netstat überprüfen, ob der Port offen ist.

sudo netstat -ntlp | grep LISTEN

 

Nachdem der Jetty Server gestartet ist, kann MITREid Connect über den localhost erreicht werden. Standardmäßig heißt der Benutzer user und das Passwort password.

http://localhost:8080/openid-connect-server-webapp/

 

Variante 2:

Mit IntelliJ das Projekt OpenID-Connect-Java-Spring-Server öffnen. Nachdem das Projekt geöffnet worden ist sollte Maven automatisch die Ressourcen ziehen.
Im Anschluss wird die Maven Project-Ansicht geöffnet. In dieser Ansicht wird das Projekt MITREid Connect (root) ausgewählt und der package-Vorgang wird gestartet.

Quelle: Eigene Darstellung Der package-Vorgang wird gestartet

Durch den Aufbau im Wurzelverzeichnis erstellt Maven automatisch alle Abhängigkeiten zwischen Submodulen. Ein direktes Erstellen in den Submodulen schlägt oft fehl, da die Querabhängigkeiten zu anderen Teilen des Projekts (wie zum Beispiel die Abhängigkeit des Servers von Common) noch nicht aufgebaut wurden. Der Build-Prozess erstellt eine .jar-Datei für openid-connect-common, openid-connect-client, openid-connect-server und eine WAR-Datei für openid-connect-server-webapp in den folgenden Verzeichnissen:

  • openid-connect-client/target/openid-connect-client-{VERSION}.jar
  • openid-connect-common/target/openid-connect-common-{VERSION}.jar
  • openid-connect-server/target/openid-connect-server-{VERSION}.jar
  • openid-connect-server-webapp/target/openid-connect-server-webapp.war

Wobei {VERSION} die aktuelle Build-Version des Projekts ist, wie bspw. 1.3.3-SNAPSHOT.

Es zeigt sich, dass die Variante zwei den Prozess mit dem Code 0 beenden konnte.

Bisher hat leider die Variante zwei noch nicht funktioniert.

 

Nützliche Maven Optionen

Es kann sein, dass Maven nicht fehlerfrei durchläuft. Deshalb gibt es ein paar Nützliche Anweisungen, die verschiedene Optionen daktivieren während dem Erstellen:

 

Unit-Tests überspringen

mvn -DskipTests package

 

JavaDoc Genierung überspringen

mvn -Dmaven.javadoc.skip=true package

 

HTTP- und HTTPS-Proxy konfigurieren

Um einen HTTP- und HTTPS-Proxy zu konfigurieren, fügen Sie diese Option hinzu (insbesondere, weil es scheint, dass Maven unter Linux die Datei settings.xml nicht immer liest):

mvn -Dhttp.proxyHost=proxy -Dhttp.proxyPort=80 -Dhttps.proxyHost=proxy -Dhttps.proxyPort=80 package

 

Datenverbindung

Die Demo-Server-Webanwendung ist standardmäßig für die Verwendung einer In-Memory-HyperSQL-Datenbank (hsqldb) konfiguriert. Alle vom Server gespeicherten Daten wie Token, Clients und Benutzerberechtigungen gehen beim Herunterfahren des Servers verloren. Um Daten länger als eine einzelne Sitzung zu persistieren, müssen die Datenquelle wie in openid-connect-server-webapp/src/main/webapp/WEB-INF/data-context.xml konfiguration geändert werden.

Der Server wird automatisch mit einem Client und zwei Benutzern konfiguriert, die in der Datei openid-connect-server-webapp/src/main/resources/db/clients.sql und openid-connect-server-webapp/src/main/resources/db/users.sql aufgelistet sind. Diese Dateien werden automatisch von der hsqldb-Datenquelle geladen und können für andere Clients und Benutzer bearbeitet werden.

 

Java Cryptographic Extension (JCE)

Das Projekt verwendet JCE über BouncyCastle, was eine spezielle Installation erforderlich machen kann. Wenn auf die Fehler javax.crypto.JceSecurity oder "TestDefaultJWTEncryptionAndDecryptionService.java [XXX,X] error: cannot find symbol" stoßen, gehe folgendermaßen vor:

Fügen Sie den BouncyCastle-Provider zu Ihrem JRE / JDK hinzu, gemäß Anweisungen unter http://www.bouncycastle.org/wiki/display/JA1/Provider+Installation/

Laden die "Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy-Dateien" für Ihre JRE-Version von http://www.oracle.com/technetwork/java/javase/downloads/index.html herunter (scrollen Sie zum Ende der Seite)

Installieren die neuen Richtliniendateien anhand der README-Datei, die im Download enthalten sind. Der Download enthält neue Versionen von local_policy.jar und US_export_policy.jar. Diese Dateien müssen in jre/lib/security folder(s - multiple on Windows) abgelegt werden und die aktuellen Dateien ersetzen. Falls es später gewünscht ist, dass zu dem ursprüngliche Zustand zurückgekehrt werden soll empfiehlt es sich die originalen Dateien zu sichern.

 


Die Server Webapp deployen

Das Modul "openid-connect-server-webapp" erstellt eine gepackte WAR-Datei, die für eine Reihe von verschiedensten Serverlet-Containern bereit gestellt werden kann. Informationen zum Konfigurieren des Servers für die lokale Verwendung findet man unter der Dokumentation zur Serverkonfiguration. Am wichtigsten ist, dass der Issuer-Wert in der Server-Konfigurations-Bean auf die URL gesetzt werden muss, von dem auf den Server zugegriffen werden kann. Der Standardwert für den Issuer ist http://localhost: 8080/openid-connect-server-webapp/.

 


Test mit der App AppAuth von OpenID

OpenID stellt eine Android-Applikation zur Verfügung mit dem der Benutzer seinen OpenID-Provider testen kann. Das Projekt kann über Github bezogen und mit AndroidStudio augseführt werden. AppAuth beinhaltet Anleitungen für die Provider Gluu, Google und Okta. Leider gibt es bisher noch keine Anleitung für MITREid weshalb die Konfiguration für MITREid adaptiert worden ist. In Android Studio muss die Datei res/raw/auth_config.json angepasst werden. Der Adresse von dem Server wurde mit Platzhalter SERVER gekennzeichnet. Ebenso müssen die IDs entsprechend angepasst werden.

{    "client_id": "198bdb5b-f8f2-4bac-81ba-7c562e4a4b9a",    "redirect_uri": "net.openid.appauthdemo:/oauth2redirect",    "authorization_scope": "openid email profile",    "discovery_uri": "",    "authorization_endpoint_uri": "http://SERVER:8080/authorize",    "token_endpoint_uri": "http://SERVER:8080/token",    "registration_endpoint_uri": "",    "user_info_endpoint_uri": "http://SERVER:8080/userinfo",    "https_required": true  }  

 

 


Quellen:

[1] https://github.com/mitreid-connect/OpenID-Connect-Java-Spring-Server

[2] https://tools.ietf.org/html/rfc7636

[3] https://id.mitre.org/connect/

[4] https://github.com/mitreid-connect/OpenID-Connect-Java-Spring-Server/wiki/Build-instructions

[5] Logo von https://github.com/mitreid-connect/OpenID-Connect-Java-Spring-Server

[6] https://github.com/openid/AppAuth-Android

Suche

Kategorien

Wir nutzen Cookies auf unserer Website. Einige von ihnen sind essenziell für den Betrieb der Seite, während andere uns helfen, diese Website und die Nutzererfahrung zu verbessern (Tracking Cookies). Sie können selbst entscheiden, ob Sie die Cookies zulassen möchten. Bitte beachten Sie, dass bei einer Ablehnung womöglich nicht mehr alle Funktionalitäten der Seite zur Verfügung stehen.