Integrationtest - Keycloak

Raphael_

Aktives Mitglied
Hi,
ich nutze Keycloak als mein Identity provider. Meine Spring Boot Anwendung hat nun einen Endpoint. Diesen möchte ich jetzt mit Integrationtests testen. Dabei stoße ich aber auf folgendes Problem:
Mein Keycloak lässt keine Anfragen, die nicht autorisiert sind an meinen Endpoint. Das heiß mein Integrationtest bekommt auch sofort einen 401 zurück und ich komme eben nicht an den Endpoint, den ich wirklich testen will, weil das Keycloak das alles abfängt. Wie kann ich das lösen?
 

KonradN

Super-Moderator
Mitarbeiter
Du musst dann natürlich beim Integrationstest für alle Dinge, wo Du angemeldet sein musst, dich vorher anmelden. Also z.B. erst ein Token beim Keycloak holen und dann die Requests absetzen, die Du testen willst.
 

Raphael_

Aktives Mitglied
Aber um einen Token ja zu bekommen muss man ja angemeldet sein. Also soll ich dann einen extra "Integrationtest user" erstellen?
Ich habe auch sowas gefunden, wo man das über Profile regelt, also bei mir blockt ja eine Security config unauthorisierte Zugriffe. Man kann scheinbar eine weitere Security Config erstellen, die dann nur für die Integration tests gültig ist, wo ich dann einstellen würde, dass man keinen token braucht. Ist das auch eine Möglichkeit, oder hab ich da was nicht bedacht?
 

Oneixee5

Top Contributor
Aber um einen Token ja zu bekommen muss man ja angemeldet sein. Also soll ich dann einen extra "Integrationtest user" erstellen?
Ich habe auch sowas gefunden, wo man das über Profile regelt, also bei mir blockt ja eine Security config unauthorisierte Zugriffe. Man kann scheinbar eine weitere Security Config erstellen, die dann nur für die Integration tests gültig ist, wo ich dann einstellen würde, dass man keinen token braucht. Ist das auch eine Möglichkeit, oder hab ich da was nicht bedacht?
Das ist richtig, Profile sind eine Möglichkeit. Damit wäre es auch möglich einen Filter zu konfigurieren, welcher bestimmte Header unf Parameter usw. für den Test einfügt.
 

KonradN

Super-Moderator
Mitarbeiter
Man kann scheinbar eine weitere Security Config erstellen, die dann nur für die Integration tests gültig ist, wo ich dann einstellen würde, dass man keinen token braucht. Ist das auch eine Möglichkeit, oder hab ich da was nicht bedacht?
Das kann prinzipiell auch eine Idee sein würde ich sagen. Das kenne ich aber nicht. Ein Teil des Integrationstests ist (aus meiner Sicht) ja auch der Test, dass die Anmeldung entsprechend über OAuth klappt. Daher ist der Part vorhanden.

Und damit haben wir den Part bei allen unseren Tests mit drinnen. Und für die Integrationstests haben wir natürlich eine Umgebung für Integrationstest also incl. der Testuser.

Teilweise ist die Anmeldung auch wichtig, da wir auch Berechtigungen mit abprüfen. Dann haben wir diverse Accounts mit entsprechenden Rollen und können dann auch testen, dass der Admin gewisse Sachen kann, die ein normaler User dann nicht kann.
 

LimDul

Top Contributor
Grundsätzlich würde ich auch die Variante bevorzugen, bei der man sich an Keycloak anmeldet und das Token mitschickt. Das sollte auch nicht aufwendig sein - im letzten Projekt mussten wir auch ein Token holen, da manche Services mit einem anderen User aufgerufen wurden und das war auch nicht aufwendig. Details kenne ich aber nicht mehr, welche Lib wir da verwendet hatten.

Die anderen Varianten gehen auch, haben aus meiner Ansicht zwei Nachteile.

Den ersten Nachteil hat @KonradN bereits angesprochen - es testet nur Teile. Und insbesondere, wenn irgendwo in der Anwendung dann eine Berechtigungsprüfung stattfindet, gibt es Probleme.

Das zweite ist, man baut jetzt extra Code, damit man in gewissen Konstellationen Services ohne Authentifzierung aufrufen kann. Dann bestimmt einer Risiko, dass dieser Code "entkommt" und im produktiven Code landet. Ich hab schon so oft gelesen und mitbekommen, wie Testdaten in Produktivsysteme entkommen sind, dass man sowas nie zu 100% ausschließen kann. Klar ist es unwahrscheinlich, aber Fehler passieren. Dementsprechend würde ich das Risiko gar nicht eingehen wollen.
 

Ähnliche Java Themen

Neue Themen


Oben