Einbindung geschützter Dienste in Webanwendungen

Beabsichtigen Sie unsere geschützten Dienste innerhalb Ihrer Webanwendung einzusetzen, können Sie als registrierter Benutzer einen Applikationsschlüssel beantragen. Wenden Sie sich dazu an das des BKG. Nach Erhalt des Applikationsschlüssels können Sie diesen wie unten beschrieben in Ihrer Anwendung integrieren und die für Sie freigeschaltenen Diensten nutzen.

Funktionsweise

Mit dem Applikationsschlüssel wird zunächst eine Session eröffnet. Auf Basis dieser Session kann ein Internet-Nutzer als Nutzer Ihrer Anwendung identifiziert werden. Damit erhält der Nutzer im Rahmen der Webanwendung Zugriff auf die dem Applikationsschlüssel zugeordneten Webdienste. Die Session ist nur für eine begrenzte Dauer gültig (ca. 8 Stunden).

Die Authentifizierung über eine Session kann über eine der folgenden beiden Optionen genutzt werden:

  • Verwendung einer SessionID per Cookie zur Authentifizierung
    Hierbei wird innerhalb der Browsersitzung ein Cookie gesetzt, welches zur Authentifzierung herangezogen wird. Dies setzt voraus, dass Drittanbietercookies für die Domain sg.geodatenzentrum.de im Browser zugelassen sind. Beim Aufruf der Dienste ist nichts weiter zu beachten.

  • Verwendung einer SessionID per URL zur Authentifizierung
    Bei der Initialisierung der Anwendung muss ein Session-Token generiert werden, welches beim Aufruf der geschützten Dienste innerhalb der URL angegeben werden muss. Dieses Token ist für einen begrenzten Zeitraum gültig. Im Gegensatz zu den Session-Cookies sind keine gesonderten Browsereinstellungen vorzunehmen.

SessionID per Cookie

Der Einsatz einer Cookie-basierten Authentifizierung bietet sich an, wenn Sie vorgefertigte Frameworks für Ihre Webanwendung einsetzen und keine Anpassungsmöglichkeiten für den Aufruf der Webdienste haben. Allerdings setzt dies voraus, dass bei den Nutzern Ihrer Anwendung Drittanbietercookies zugelassen sind. Leider werden heutzutage Drittanbietercookies standardmäßig bei vielen Browsern blockiert. Der Nutzer muss also ggf. Anpassungen an den Cookie-Einstellungen vornehmen.

Eine SessionID per Cookie kann über eine der folgenden Leerdateien initialisiert werden:

  • CSS-Variante:
    <link rel="stylesheet" href="http://sg.geodatenzentrum.de/web_bkg_webmap/bkg_maps.css?bkg_appid=IHR_API_KEY" />

  • JS-Variante:
    <script charset="utf-8" src="http://sg.geodatenzentrum.de/web_bkg_webmap/lib/bkg_maps.js?bkg_appid=IHR_API_KEY" type="text/javascript"></script>
    

SessionID per URL

Wollen Sie die Problematik der Drittanbietercookies umgehen, dann empfehlen wir den Einsatz einer SessionID per URL.

Bei der Initialisierung der Webanwendung muss die SessionID generiert werden. Dies erfolgt durch den Aufruf folgender URL:
https://sg.geodatenzentrum.de/gdz_getSession?bkg_appid=IHR_API_KEY&domain=IHRE_APP_DOMAIN.
Die Antwort dieses Aufrufs liefert die SessionID.

Die SessionID kann nun zum Aufruf geschützter Dienste in der URL direkt hinter dem Dienstname (erstes Pfadsegment) durch __ angegeben werden: http://sg.geodatenzentrum.de/NAME-DIENST__SESSIONID...

Eine URL für einen Dienstaufruf sieht beispielsweise wie folgt aus:

  • http://sg.geodatenzentrum.de/wms_webatlasde__SESSIONID?SERVICE=WMS&REQUEST=GetMap...

  • http://sg.geodatenzentrum.de/wmts_dop__SESSIONID/tile/1.0.0/rgb/default/DE_EPSG_25832_DOP/12/969/1228.png

Im Folgenden sei eine exemplarische Implementierung unter OpenLayers 2 gezeigt:

1.	  function getSessionToken(appId , appDomain) {
2.	    try {
3.	      var request = OpenLayers.Request.GET({
4.	        url: "http://sg.geodatenzentrum.de/gdz_getSession",
5.	        params: {bkg_appid: appId, domain: appDomain},
6.	        async: false
7.	      });
8.	      if (request.status !== 200) {
9.	        console.log("Problem bei der Session-Initialisierung: " + request.responseText);
10.	        return "n.a.";
11.	      }
12.	      return request.responseText;
13.	    } catch (err) {
14.	      console.log(err);
15.	      return "n.a.";
16.	    }
17.	  }
18.	
19.	  var session = getSessionToken(API_KEY, API_DOMAIN);
20.	  var webatlasde = new OpenLayers.Layer.WMS(
21.	      "WebAtlasDE",
22.	      "http://sg.geodatenzentrum.de/wms_webatlasde__" + session,
23.	      {layers: 'webatlasde'},
24.	      {isBaseLayer: true, attribution: '© GeoBasis-DE / BKG 2021'}
25.	  );