Konfiguration
Konfigurationsdateien
Konfigurationsdateien werden vom Identity Service in der folgenden Reihenfolge verarbeitet:
-
WEB-INF/classes/default-application.properties
(NICHT VERÄNDERN)
In dieser Datei befinden sich alle Konfigurationsoptionen mit ihren Standardwerten. -
WEB-INF/classes/custom-application.properties
Wenn eine Änderung des Datenverzeichnis (data.directory.location
) nötig ist, muss die Änderung in dieser Datei erfolgen. Alle weiteren Anpassungen erfolgen in der nachfolgenden Datei. -
[data.directory.location]/application.properties
Das Bearbeiten dieser Datei ist der empfohlene Weg Konfigurationsänderungen vorzunehmen. Das Datenverzeichnis (data.directory.location
) ist in der Standardinstallation das Verzeichnis${user.home}/.identity-service
.
Das Format der Konfigurationsdateien muss dem Java Properties Dateiformat entsprechen.
# Die Dateien müssen UTF-8 kodiert sein, sonst können Umlaute zu Fehlern führen!
# Am sichersten ist die Kodierung von Umlauten in Unicode-Syntax z.B: ä = \u00E4 (vgl. http://0xcc.net/jsescape/)
# Kommentare erfolgen mit Raute
# die Syntax ist:
key = value
# Eine Value kann einen anderen Key referenzieren
key1 = http://${key.with.server}/test
Umgebungsvariablen
Sie können die Werte aller Konfigurationsparameter auch mit Umgebungsvariablen setzen.
Diese überschreiben immer die Werte, die Sie in den application.properties
setzen.
Das ist hilfreich, wenn der Identity Service zum Beispiel in einem Docker-Container betrieben wird.
Sie müssen die Namen der Konfigurationsparameter aus den application.properties
für die Verwendung als Umgebungsvariablen anpassen:
Ersetzen Sie alle Buchstaben des Namen durch Großbuchstaben sowie den Punkt .
durch den Unterstrich _
.
Beispiel: security.oauth.provider
wird zu SECURITY_OAUTH_PROVIDER
.
Dieses Muster gilt für alle Konfigurationsparameter.
Konfigurationsparameter
Allgemeine Einstellungen
In diesem Abschnitt werden die Parameter beschrieben, die am häufigsten in einer Standardinstallation verändert werden müssen.
Weitere Parameter sind in der Datei WEB-INF/classes/default-application.properties
in Kommentaren beschrieben.
data.directory.location
-
Datenverzeichnis, in das die lokale Konfiguration der Manager UI abgelegt wird.
Für den Fall, dass der Tomcat-Server als Windows-Dienst betrieben wird, liegt das
.identity-service
Verzeichnis im Nutzerverzeichnis des Tomcat-Nutzers, der den Dienst gestartet hat. Pfad-Trenner müssen entweder als/
oder\\
angegeben werden.Tomcat NutzerWenn kein Tomcat-Nutzer angelegt wurde, wird der Tomcat-Server mit dem Systemnutzer ausgeführt (nicht empfohlen!). In diesem Fall wird das Verzeichnis unter folgendem Pfad angelegt:C:/Windows/System32/config/systemprofile/.identity-service
or%systemroot%/ServiceProfiles/LocalService/.identity-service
.Ein abweichendes Datenverzeichnis kann in der Datei
WEB-INF/classes/custom-application.properties
konfiguriert werden.Standardwert:
$\{user.home\}/.identity-service
configuration.watch.changes
-
Überwachung der Datei
${data.directory.location}/application.properties
.Bei Aktivierung können Konfigurationseinstellungen ohne Neustart der Web-Applikation geändert werden. Die Konfigurationsdatei muss beim Starten der Web-Applikation vorhanden sein, damit sie überwacht werden kann.
Standardwert:
true
Datenbank-Anbindung
Identity Service verwendet standardmäßig eine HSQL-Datenbank, die in der Auslieferung enthalten ist.
Sie wird zu Testzwecken automatisch im Dateisystem erstellt und erfordert keine weitere Konfiguration.
Verwenden Sie die HSQL-Datenbank nicht in produktiven Umgebungen.
HSQLDB
Mehrere parallele Installationen von Identity Service können nicht auf dieselbe HSQL-Datenbank verweisen.
Ändern Sie in diesem Fall für eine Instanz den Parameter Microsoft SQL Server
Setzen Sie bei Verwendung von Microsoft SQL Server bei der Anlage der Datenbank die Collation auf ein case-sensitives Format (zum Beispiel |
Ändern Sie die Datenbankverbindung, indem Sie die folgenden Eigenschaften bearbeiten:
db.use
-
Legt fest, ob eine direkte Datenbankverbindung (JDBC) oder eine container-managed Datenbankverbindung (JNDI) aufgebaut wird.
Verwenden Sie JNDI, wenn mehrere Webanwendungen im Container (z.B. Apache Tomcat) vorhanden sind, die auf dieselbe Datenbank zugreifen (siehe Apache Tomcat JNDI-Dokumentation ). Bei JDBC ist keine Container-Konfiguration notwendig.
Erlaubte Werte:
jndi
,jdbc
Standardwert:jdbc
db.type
-
Herstellerspezifischer Typ des verwendeten Datenbanksystems.
Dieser wird intern verwendet, um korrekte und optimierte Datenbankanfragen zu erzeugen.
Erlaubte Werte:
Datenbank Typ Beispiel-URL PostgreSQL
postgresql
jdbc:postgresql://localhost:5432/identity
Oracle Database
oracle
jdbc:oracle:thin:@myhost:1521:orcl
Microsoft SQL Server
sqlserver
jdbc:sqlserver://localhost:1433;databaseName=identity
HSQLDB
hsqldb
jdbc:hsqldb:file:$\{data.directory.location\}/storage/db;shutdown=true
Standardwert:
hsqldb
db.hibernate.schemaUpdate
-
Definiert, ob und wie das Datenbankschema automatisch angepasst wird.
Erlaubte Werte:
validate
,update
Standardwert:update
Direkte Datenbankverbindung (JDBC)
Um eine direkte Datenbankverbindung zu nutzen, konfigurieren Sie zusätzlich zu den drei o.g. Parametern die folgenden Werte:
db.jdbc.url
-
JDBC Datenbankverbindungs-URL.
Dieser Wert ist vom verwendeten Datenbanksystem abhängig (siehe oben stehende Tabelle).
Standardwert:
jdbc:hsqldb:file:$\{data.directory.location\}/storage/db;shutdown=true
db.jdbc.username
-
Login-Name des Datenbankzugangs.
Standardwert:
sa
db.jdbc.password
-
Passwort des Datenbankzugangs.
db.jdbc.maxActiveConnections
-
Maximale Anzahl aktiver Datenbankverbindungen im verwendeten Connection-Pool.
Standardwert:
50
db.jdbc.minActiveConnections
-
Minimale Anzahl aktiver Datenbankverbindungen im verwendeten Connection-Pool.
Standardwert:
1
Wenn eine JDBC-Verbindung verwendet wird, muss der für die Datenbank passende JDBC-Treiber in das Verzeichnis %IDENTITY_SERVICE%/WEB-INF/lib kopiert werden.
|
Container-managed Datenbankverbindung (JNDI)
Um eine Datenbankverbindung über JNDI einzurichten, müssen zusätzlich zu den drei o.g. Parametern die folgenden Werte konfiguriert werden:
db.jndi.name
-
JNDI-Name, über den die Datenbank vom Container erfragt werden kann.
Standardwert:
java:comp/env/jdbc/identity
Darüber hinaus sind folgende Schritte in der Konfiguration des Tomcats zu befolgen:
-
Öffnen Sie die Datei
server.xml
, die sich im Verzeichnisconf
des Apache Tomcat befindet. -
Fügen Sie zum Element
<GlobalNamingResources>
das folgende Element hinzu:server.xml<Resource name="identitydb" auth="Container" type="javax.sql.DataSource" maxTotal="50" maxIdle="1" maxWaitMillis="10000" defaultAutoCommit="false" username="postgres" password="postgres" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://localhost:5432/identity" />
Dieses Element ist beispielhaft auf die PostgreSQL-Datenbank angepasst. Wenn Sie eine andere Datenbank als PostgreSQL verwenden, passen Sie die Attribute
driverClassName
und URL an. In der oben stehenden Tabelle sind die Werte für die verschiedenen Datenbanken aufgeführt. -
Passen Sie die Attribute
username
undpassword
des Elements an die Gegebenheiten in Ihrem System an. -
Kopieren Sie die
JAR
-Datei des von Ihnen verwendeten JDBC-Datenbanktreibers in das Verzeichnislib
des Apache Tomcat. -
Öffnen Sie die Datei
context.xml
im VerzeichnisMETA-INF
der Identity Service-Webanwendung und entfernen Sie die Kommentare um das Element<ResourceLink name="jdbc/identity" global="identitydb" type="javax.sql.DataSource"/>
, um es zu aktivieren. -
Speichern Sie alle veränderten Dateien und starten Sie Apache Tomcat neu.
Container-managed Datenbankverbindung (JNDI mit HikariCP)
Wir empfehlen die Verwendung des Datenbank Connection Pool HikariCP .
Die Konfiguration in der server.xml
ändert sich dann wie folgt:
<Resource name="identitydb" auth="Container"
factory="com.zaxxer.hikari.HikariJNDIFactory"
type="javax.sql.DataSource"
minimumIdle="1"
maximumPoolSize="50"
connectionTimeout="10000"
dataSourceClassName="org.postgresql.ds.PGSimpleDataSource"
dataSource.url="jdbc:postgresql://localhost:5432/identity"
dataSource.user="postgres"
dataSource.password="postgres" />
Zusätzlich müssen neben dem Datenbanktreiber folgende Bibliotheken im Tomcat lib
Verzeichnis ergänzt werden:
Konfiguration des Loggings
logging.logger.level
-
Detailgrad des Log-Nachrichten
Mögliche Werte:
TRACE
,DEBUG
,INFO
,WARN
,ERROR
Standardwert:WARN
logging.file.location
-
Ort, an dem die Log-Datei gespeichert wird.
Der Standardwert entspricht dem
logs
Verzeichnis des Tomcat. Es ist möglich, die Log-Datei im Datenverzeichnis von Identity Service zu erzeugen, in dem der Wert${data.directory.location}/logs
verwendet wird.Standardwert:
${catalina.base}/logs
logging.file.prefix
-
Namen der Log-Dateien.
Standardwert:
ct-identity-service
Zusätzliche Logging-Optionen werden in der Datei default-application.properties beschrieben, z.B. zum Aktivieren oder Deaktivieren des Loggings in die Konsole, in Dateien und GELF-Protokollierung.
|
Sicherheitseinstellungen
Eine Änderung der Einstellungen hat üblicherweise keinen Einfluss auf aktive Sitzungen. Neue Einstellungen werden erst nach einem erneuten Login eines Nutzers übernommen.
Aktive Sitzungen können sofort beendet werden sollen, indem der Wert der Eigenschaft |
security.ssl.trustAny
-
Aktiviert die Unterstützung für selbst signierte Zertifikate bei HTTPS-Verbindungen.
Aktivieren Sie diese Einstellung in Produktionsumgebungen nicht.
Erlaubte Werte:
true
,false
Standardwert:false
security.login.redirect.trusted.hosts
-
Komma-separierte Liste von akzeptierten Hostnamen.
Diese Liste definiert, welche Ziele zur Weiterleitung (Redirect) akzeptiert werden, wenn Identity Service am Ende des Login-Prozesses den Browser zur nächsten Seite weiterleitet. Dies stellt sicher, dass Angreifer niemanden unter Vorlage einer entsprechenden URL auf eine bösartige Seite lenken können.
Wenn eine Applikation zum Login auf Identity Service umleitet und die Applikation unter einem anderen Hostnamen als Identity Service aufgerufen wird, müssen hier die entsprechenden Hostnamen hinzugefügt werden. Dies ist z.B. häufig bei der Nutzung von Entwicklungsprojekten der Fall.
Sie können Wildcards verwenden, um z.B. Redirects auf alle Rechner einer Domäne zu erlauben.
Standard:
localhost
Beispiel:*.gishost.org
security.oauth.clientId
-
OAuth Client-ID, die im Rahmen der Registrierung des Identity Service am Identitätsanbieter vergeben wurde.
security.oauth.clientSecret
-
OAuth Client-Secret, das im Rahmen der Registrierung des Identity Service am Identitätsanbieter vergeben wurde.
security.oauth.token.minimalLifetimeSecondsLeft
-
Minimale Lebensdauer eines Zugriff-Tokens in Sekunden, bevor es erneuert werden sollte.
security.oauth.provider
-
Definiert den aktuellen Identitätsanbieter. Mögliche Werte sind
arcgis
oderkeycloak
. security.oauth.provider.arcgis.url
-
Die URL zum ArcGIS Enterprise-Portal oder zur ArcGIS Online Organisation. Beispiel:
https://myorg.maps.arcgis.com
oderhttps://www.example.com/portal
. security.oauth.provider.arcgis.url.internal
-
Die URL zum ArcGIS Enterprise-Portal, welche für die interne Kommunikation verwendet werden soll. Die Konfiguration ist optional, standardmäßig wird der Wert von
security.oauth.provider.arcgis.url
verwendet. Beispiel:https://myhost.example.com/portal
. security.oauth.provider.arcgis.organizations
-
Wenn Sie
security.oauth.provider.arcgis.url=https://www.arcgis.com
gesetzt haben, können Sie hierüber das Login auf bestimmten ArcGIS Online Organisationen einschränken. Geben Sie mehrere Organisationen als Komma-separierte Liste an. Beispiel:myorg.maps.arcgis.com,anotherorg.maps.arcgis.com
security.oauth.provider.arcgis.roles
-
Definiert eine Übersetzung von Rollen- und Gruppennamen aus dem ArcGIS Enterprise-Portal oder ArcGIS Online in angepasste Rollennamen. Applikationen, die mit dem Identity Service verbunden sind, können dann die angepassten Rollennamen verwenden. Die Syntax ist folgende:
<name1>=<role1>,<role2>; <name2>=<role3>
Beispiel: Der Wert
org_admin=maAdmin,otherAdmin; Editors::admin=maEditor
definiert, dass die Rolleorg_admin
alsmaAdmin
undotherAdmin
verfügbar gemacht wird. Außerdem wird die GruppeEditors
des Gruppenbesitzersadmin
in die RollemaEditor
übersetzt.Anstatt Gruppenname und Besitzer anzugeben kann auch die ID der Gruppe verwendet werden:
Beispiel: Der Wert
org_admin=maAdmin,otherAdmin; 12a12ab1a1a12345678abc1abc1abcd1=maEditor
definiert, dass die Gruppe12a12ab1a1a12345678abc1abc1abcd1
in die RollemaEditor
übersetzt wird.Der Standardwert ist
org_admin=maAdmin,solrAdmin,mon_Administrator,tc_Administrator;org_publisher=maEditor
. security.oauth.provider.arcgis.roles.encodeGroupsWithTitleAndOwner
-
Dieser Wert legt fest, ob Gruppen aus ArcGIS Enterprise-Portal oder ArcGIS Online in der Form 'Titel::Besitzer' kodiert werden sollen.
Ist der Wert
true
werden Gruppen in der FormTitel::Besitzer
kodiert. Ist der Wertfalse
erfolgt diese Kodierung nicht und die ID der Gruppe wird verwendet.Der Standardwert ist
true
. security.oauth.provider.arcgis.roles.includeMappedRolesOnly
-
Wenn der Wert
true
ist, werden nur Rollen ausgegeben, die insecurity.oauth.provider.arcgis.roles
definiert sind. Wenn der Wertfalse
ist, werden hingegen alle Rollen ausgegeben.Der Standardwert ist
true
. security.oauth.provider.keycloak.url
-
Die Basis-URL von Keycloak, z.B.
https://www.example.com/authn
security.oauth.provider.keycloak.realm
-
Der Name des Keycloak-Realm, für den Zugriffe erlaubt sind.
security.oauth.provider.keycloak.scopes
-
Erlaubt die Definition von eigenen OpenID Connect-Scopes, die beim Login und beim Abfragen von Tokens gesendet werden. Wenn der Wert leer ist, wird standardmäßig
openid,profile,email,offline_access
verwendet. security.oauth.provider.keycloak.revokeRefreshTokens
-
Aktiviert das Widerrufen von Refresh-Tokens während eines Logouts oder wenn eine Nutzersession abläuft. Das Widerrufen führt als Nebeneffekt zu einem globalen Logout des Nutzers am Keycloak. Um dieses Verhalten zu deaktivieren, setzen Sie den Wert auf
false
.
security.oauth.tokenRules
-
Definiert, an welche URLs das Senden von Zugriffs-Token erlaubt ist und wie diese übertragen werden sollen.
Der Wert ist eine Semikolon-separierte Liste von Regeln:
<rule_1>[;<rule_n>]…
Eine Regel ist eine Komma-separierte Liste von URLs gefolgt von einem Transportnamen:
<url_1>[,<url_n>]…[,<transport_mode>]
Unterstützte Transportnamen sind:
-
BEARER
(default): Das Token soll als HTTP HeaderAuthorization: Bearer <token>
gesendet werden. -
TOKEN
: Das Token soll als URL Query Parameter…&token=<token>
gesendet werden. -
ACCESS_TOKEN
: Das Token soll als URL Query Parameter…&access_token=<token>
gesendet werden.
Beispiel:
http://www.example.com/arcgis,TOKEN;http://other.example.com/service1,http://other.example.com/service2,ACCESS_TOKEN
Das Beispiel definiert, dass ein Zugriffs-Token an
http://www.example.com/arcgis
als…&token=<token>
gesendet werden soll. Außerdem soll ein Zugriffs-Token anhttp://other.example.com/service1
undhttp://other.example.com/service2
, als…&access_token=<token>
gesendet werden.Der Prefix
deny:
vor einer URL definiert, dass keine Zugriffs-Tokens an diese URL gesendet werden sollen. Beispiel:deny:http://my.example.com/service;
Einige Regeln werden automatisch für den konfigurierten Identitätsanbieter und den Identity Service erzeugt.
-
security.session.maxIdleTimeInSeconds
-
Die erlaubte Leerlaufzeit für Sitzungen in Sekunden. Sitzungen, die länger als dieser Wert nicht genutzt werden, werden durch eine Hintergrundaufgabe ungültig gemacht. Der Standardwert ist
3600
Sekunden (eine Stunde). security.session.cookieName
-
Der Name des Sitzungs-Cookie. Der Standard ist
ctIDENTITY
. security.session.cookieDomain
-
Der Name der Domain des Sitzungs-Cookie, z.B.
example.com
. Standardmäßig ist das Sitzungs-Cookie an keine Domain gebunden. security.session.enforceSecureAndSameSiteNone
-
Erzwingt die Flags
samesite=none
undsecure
am Sitzungs-Cookie. Diese Einstellung kann für die Realisierung von Cross Domain Szenarien relevant sein. Der Standardwert istfalse
.
CORS-Einstellungen
Diese Einstellungen werden benötigt, um Cross Origin Requests zu ermöglichen.
cors.allowed.origins
-
Liste von Basis-URLs von Webseiten, die per CORS auf die angebotenen Serviceschnittstellen zugreifen dürfen.
*
kann als Platzhalter genutzt werden.Beispiele:
-
http://mydomain.net,http://otherdomain.de
-
http*://*.mydomain.net:*
Das Beispiel erlaubt den Zugriff von jeder Subdomäne vonmydomain.net
viahttp
andhttps
von jedem Port.
-