This repository is for the OZG application room.
Getting Started
Weitere Dokumentation
Weitere Informationen finden Sie unter folgenden Links:
- Spring Boot Gradle Plugin Reference Guide
- Create an OCI image
- Spring Boot Actuator
- Spring Boot Web
- springdoc-openapi
- Spring Boot DevTools
- Spring Security SAML2
- openapi-generator-maven-plugin
Guides
Mehr informationen zu den verwendeten Feature sind hier:
- Building an Application with Spring Boot
- Building a RESTful Web Service with Spring Boot Actuator
- Validating Form Input
- Documenting a Spring REST API Using OpenAPI 3.0
- SAML with Spring Boot and Spring Security
- Keycloak Configuration
- BayernId Implementation and configuration
Healthchecks sind hier:
Der Info Endpoint hat auch die build Informationen.
Das REST Interface ist mit OpenAPI V3 dokumentiert und kann auf der Swagger-Seite angesehen werden
http://localhost:8080/swagger-ui/index.html
SAML Zertifikate
Da die SAML Daten signiert und verschlüsselt werden muss man beim Erstellen der Metadaten für das BaynId Portal passende Zertifikate erzeugen. Das ist hier beschrieben.
Umgebung | Austauschen am | Läuft ab am |
---|---|---|
Prod | 10.12.2026 | 11.09.2027 |
Test | 02.07.2025 | 02.08.2025 |
Dev | n.a | n.a |
Anwendung starten
Es gibt drei Profile:
- default - Das Profil für die Produktionsumgebung
- local - Das Profil für die Entwicklung
- lasttest - Das Profil um Lasttests auszuführen.
Man kann die Anwendung über die Kommandozeile starten
./mvnw spring-boot:run -Dspring-boot.run.profiles=local
Um den Port der Management api zu ändern, kann man den Befehl verwenden
./mvnw spring-boot:run -Dmanagement.server.port=8081
oder man verwenden docker compose
mongodb:
image: mongo:4
ports:
- "27017:27017"
environment:
- MONGODB_EXTRA_FLAGS=--profile=2
volumes:
- mongodb-data:/data/db
clamav:
ports:
- '3310:3310'
image: 'docker.ozg-sh.de/clamav/clamav:stable'
clamav-api:
image: benzino77/clamav-rest-api
command: [ '/usr/bin/wait-for-it', '-h', 'lt-clamav', '-p', '3310', '-s', '-t', '300', '--', 'npm', 'start' ]
depends_on:
- clamav
environment:
- NODE_ENV=production
- CLAMD_IP=lt-clamav
- APP_FORM_KEY=FILES
- APP_PORT=3000
- APP_MAX_FILE_SIZE=26214400
ports:
- "3000:3000"
info-manager:
image: 'docker.ozg-sh.de/info-manager:snapshot-latest'
platform: linux/amd64
ports:
- '9091:9091'
- '8084:8084'
environment:
- SPRING_DATA_MONGODB_HOST=lt-mongodb
- SPRING_DATA_MONGODB_PORT=27017
- SPRING_DATA_MONGODB_DATABASE=lt-info-manager
- GRPC_SERVER_PORT=9091
- SPRING_PROFILES_ACTIVE=default
- MANAGEMENT_SERVER_PORT=8084
- SERVER_PORT=8083
- logging_level_de_ozgcloud=INFO
info-manager-proxy:
image: 'docker.ozg-sh.de/info-manager-proxy:snapshot-latest'
ports:
- 8381:8082
environment:
- HTTP_SERVER_PORT=8082
- GRPC_SERVER_MOCK=false
- GRPC_URL=lt-info-manager:9091
- LOGGING_LEVEL=DEBUG
depends_on:
- info-manager
antragraum-server:
image: 'docker.ozg-sh.de/antragsraum-server:snapshot-latest'
platform: linux/amd64
ports:
- '9090:9090'
- '8080:8080'
- '8081:8081'
environment:
- SPRING_PROFILES_ACTIVE=lasttest
- ozgcloud_jwt_secret="346593nbdgb8e74t6vw477q34bg83456§$$%/&Hgvt78hlsjdgfw8äy.skeiw44tz asjkdefa wlfugwegw"
- ozgcloud_antragsraum_bayernid_redirect-url=http://localhost:8082
- clamav_scanUrl=http://clamav-api:3000/api/v1/scan
- logging_level_org_springframework_web=INFO
- SPRING_SECURITY_SAML2_RELYINGPARTY_REGISTRATION_BAYERNID_ENTITY-ID=https://sso.load.by.ozg-cloud.de/realms/by-antragsraum-idp
- SPRING_SECURITY_SAML2_RELYINGPARTY_REGISTRATION_BAYERNID_ASSERTINGPARTY_METADATA-URI=https://sso.dev.by.ozg-cloud.de/realms/by-antragsraum-idp/protocol/saml/descriptor
- SPRING_SECURITY_SAML2_RELYINGPARTY_REGISTRATION_BAYERNID_SIGNING_CREDENTIALS_0_PRIVATE-KEY-LOCATION=file:///idp.key
- SPRING_SECURITY_SAML2_RELYINGPARTY_REGISTRATION_BAYERNID_SIGNING_CREDENTIALS_0_CERTIFICATE-LOCATION=file:///idp.crt
- SPRING_SECURITY_SAML2_RELYINGPARTY_REGISTRATION_BAYERNID_DECRYPTION_CREDENTIALS_0_PRIVATE-KEY-LOCATION=file:///idp.key
- SPRING_SECURITY_SAML2_RELYINGPARTY_REGISTRATION_BAYERNID_DECRYPTION_CREDENTIALS_0_CERTIFICATE-LOCATION=file:///idp.crt
volumes:
- type: bind
source: bayernid-dev-sign.crt
target: /idp.crt
read_only: true
- type: bind
source: bayernid-dev-sign.key
target: /idp.key
read_only: true
antragraum-proxy:
image: 'docker.ozg-sh.de/antragsraum-proxy:snapshot-latest'
ports:
- 8383:8082
environment:
- HTTP_SERVER_PORT=8082
- GRPC_SERVER_MOCK=false
- GRPC_SERVER_PORT=9093
deploy:
resources:
limits:
cpus: '0.001'
memory: 50M
reservations:
cpus: '0.0001'
memory: 20M
Einstellungen
Wichtige Einstellungen
ozgcloud:
antragsraum:
nachricht-proxy:
base-url: http://localhost:8383
infomanager-proxy:
base-url: http://localhost:8381
clamav:
scanUrl: http://127.0.0.1:3000/api/v1/scan # The REST endpoint for virus scans
ozgcloud:
code:
expire:
seconds: 30 # Time in seconds after the login code expires
jwt:
secret: "346593nbdgb8e74t6vw477q34bg83456§$%/&Hgvt78hlsjdgfw8äy.skeiw44tz asjkdefa wlfugwegw"
# Secret of signing the Jwt Token provided to the front end.
antragsraum:
logoutSuccessUrl: "http://localhost:8082/?logout" # The redirect url after a logout
authOrigins: # the access-allow-oring setting for the authentication endpoints
- "http://localhost:8082"
- "http://localhost:8080"
apiOrigins: # the access-allow-oring setting for the rest endpoints
- "http://localhost:8082"
otherOrigins: # the access-allow-oring setting for other path like static files etc.
- "http://localhost:8082"
Die Einstellung für das BayernId Login sind hier beschrieben
BayernId Implementation and configuration
Auf dev wird Keycloak als ersatz für BayernId verwendet. Das Setup ist hier beschrieben
Useful Tools
curl
Ist eine Komandozeilenanwendung um http requests zu machen.
Beispiele:
Upload einer Datei
6358fd0bee7a051389cdd787 ist die Id des Vorgangs und 6358fd4146811d04010f44d1 ist die Id der Nachricht.
curl -F file=@</path/to/the/file/file_name> http://localhost:8080/api/file/6358fd0bee7a051389cdd787/6358fd4146811d04010f44d1 -v
Verwendetet Ports
Lokale Dev Umgebung:
Port | Application/Service | Addresses |
---|---|---|
8080 | Antragsraum REST Services | http://localhost:8080/ |
8383 | Antragsraum Proxy Api | http://localhost:8383/ |
8082 | Frontend | http://localhost:8082/ |
8083 | Antragsraum Actuator | http://localhost:8083/actuator |
8084 | Infomanager Actuator | http://localhost:8084/actuator |
9091 | Infomanager GRPC Service | |
8381 | Infomanager Proxy Api | http://localhost:8381/ |
27027 | MongoDB |
Für die lokale Entwicklung kann nur das SAML Login vom Keycloak verwendet werden.
Dafür muss das local verwendet werden. Dazu müssen diese Werte in der application-local.yml stehen:
spring:
security:
saml2:
relyingparty:
registration:
bayernid:
entity-id: "https://sso.dev.by.ozg-cloud.de/realms/by-antragsraum-idp"
signing:
credentials:
- private-key-location: "classpath:/bayernid-dev-sign.key"
certificate-location: "classpath:/bayernid-dev-sign.crt"
decryption:
credentials:
- private-key-location: "classpath:/bayernid-dev-sign.key"
certificate-location: "classpath:/bayernid-dev-sign.crt"
assertingparty:
singlesignon:
sign-request: true
metadata-uri: "https://sso.dev.by.ozg-cloud.de/realms/by-antragsraum-idp/protocol/saml/descriptor"
Dann kann man die in Keycloak vorhandenen Benutzer verwenden.
Um das lokale Profil zu verwenden, muss die redirect url im Antragsraum-client auf http://localhost:8080/login gesetzt werden.
Weitere Informationen
Andere Tools:
mujina idp
Mujina ist ein SAML2 IdentityProvider zum testing und kann über ein REST Interface konfiguriert werden.
Um Mujina als Docker Container zu verwenden, muss dieser lokal gebaut werden.
Clone the repository https://github.com/OpenConext/Mujina
build the container using maven in the directory mujina-idp. mvn spring-boot:build-image -DskipTests
Tag the image docker tag mujina-idp:8.0.11 docker.ozg-sh.de/mujina-idp:8.0.11
Push the image docker push docker.ozg-sh.de/mujina-idp:8.0.11
Offene Punkte
- Fehlerbehandlung verbesseren. Aktuell kann es dazu kommen, dass es wenn im Namspace einer Kommune zu einem Fehler beim Laden der Rückfragen kommt, dass nur ein genereller Fehler dem User anzeigt wird. Obwohl die Rückfragen aus anderen Kommunen problemlos geladen werden können.