Startseite / Blog / Enterprise Lösungen absichern - mit map.apps und security.manager

Enterprise Lösungen absichern - mit map.apps und security.manager

Marius Austerschulte 21. August 2015

Dieser Artikel beschreibt Möglichkeiten Webanwendungen mit map.apps und security.manager abzusichern. map.apps allein bietet eine Reihe von Sicherheitsfunktionen, die für einfache Anwendungsfälle bereits ausreichen. In Kombination mit security.manager lassen sich nahezu alle Anforderungen an Sicherheit erfüllen. Es ist möglich einen Zugriffsschutz sowohl für Dienste, als auch für Funktionen von map.apps Apps äußerst feingranular zu konfigurieren.

Sicherheit mit map.apps

Apps verwalten und freigeben

Apps für map.apps werden im map.apps Manager erzeugt und verwaltet. Standardmäßig gibt es drei Arten von Benutzern, die sich in ihren Rechten für die Konfiguration von Apps unterscheiden.

  • Der Administrator-Benutzer hat Vollzugriff auf alle Apps und darf Apps anlegen, konfigurieren und löschen.
  • Der Editor-Benutzer darf vorhandene Apps konfigurieren und freigeben oder sperren, ist jedoch nicht in der Lage Apps anzulegen oder zu löschen.
  • Anonyme Benutzer, die sich nicht mit Benutzername und Passwort angemeldet haben, können Apps aufrufen und benutzen, haben jedoch keinerlei Konfigurationsrechte.

Der Administrator- und der Editor-Benutzer können im map.apps Manager einstellen, in welcher Phase ihres Lebenszyklus sich eine App aktuell befindet. Beispielsweise kann eine App sich in der Phase "Entwurf", "Freigegeben" oder "Archiviert" befinden. Nur Apps in der Phase "Freigegeben“ sind von Anonymen Nutzern in der App-Übersicht sichtbar und zugreifbar.

Apps schützen

In map.apps gibt es die Möglichkeit im map.apps Manager Berechtigungen für das Starten von Apps bestimmten Benutzerrollen zuzuweisen. Dazu muss map.apps an ein externes Benutzerverzeichnis gekoppelt sein, wie zum Beispiel security.manager oder ArcGIS Online. Für jede App kann so festgelegt werden, welche Benutzerrollen berechtigt sind, diese App auszuführen.

Rollenbasiertes App-Management mit Hilfe von security.manager

Der Administrator, sowie der Editor-Benutzer sind vordefinierte Nutzer in der Standardauslieferung von map.apps. Der security.manager kann alternativ eine vollständige Benutzerverwaltung für map.apps zur Verfügung stellen. So wird eine rollenbasierte Benutzerverwaltung möglich und es kann beliebigen Benutzern die Rolle des map.apps Administrators(maAdmin) oder Editors(maEditor) zugewiesen werden.

Rollenbasiertes App-Management mit Hilfe von ArcGIS Online

Eine ArcGIS Online Organisation oder eine ArcGIS Portal Installation kann als alternative Benutzerverwaltung für map.apps verwendet werden. In der Standardkonfiguration wird dann ein Organisations-Administrator zu einem map.apps Administrator und ein Organisations-Editor zu einem map.apps Editor.

Geschützte Karten oder Dienste nutzen

Inhalte von ArcGIS Online

In map.apps können sowohl ungeschützte als auch geschützte Karten, sowie Dienste von ArcGIS Online (Webmaps) eingebunden werden. Wenn eine geschützte Karte in der App geladen wird, das heißt, wenn der erste Zugriff auf die Karte stattfindet, öffnet sich ein Login-Dialog, in dem der Benutzer seinen Benutzernamen und sein Passwort für ArcGIS Online eingeben kann. Sollte der Benutzer nicht über die erforderlichen Rechte verfügen, wird die App gestartet, ohne dass die Webmap angezeigt wird; weder in der Karte noch in der Inhaltssteuerung. Weitere Informationen dazu finden Sie unter [1].

Alternativ kann das OAuth2-Protokoll zur Authentifizierung für ArcGIS Online benutzt werden. Dabei wird der Benutzer beim Zugriff auf eine geschützte Karte zu einer Anmeldeseite auf ArcGIS Online umgeleitet. Nach erfolgreicher Anmeldung wird der Benutzer zu map.apps zurückgeleitet und die map.apps App angezeigt. Im Gegensatz zur direkten Einbindung einer geschützten Webmap wird die map.apps-Anwendung nicht angezeigt, wenn der Benutzer sich nicht erfolgreich anmelden konnte.

Um diese OAuth-Authentifizierungsmethode zu nutzen, muss die map.apps App in ArcGIS Online als Webapp registriert werden. Außerdem müssen einige Einstellungen vorgenommen werden, die unter [1] im Abschnitt „OAuth“ beschrieben werden.

Inhalte von ArcGIS for Server

Analog zu geschützten Karten aus ArcGIS Online können auch abgesicherte ArcGIS Server Dienste in map.apps eingebunden werden. Beim ersten Zugriff auf geschützte Dienste öffnet sich ein Login Fenster in der sich ein Nutzer authentifizieren kann.

Verwaltung von Benutzern mit der map.apps User Management Extension

map.apps bietet standardmäßig die zwei Benutzer "Editor" und "Administrator" für die Verwaltung und Konfiguration von Apps im map.apps Manager an. Sollten mehr Benutzer mit dem map.apps Manager arbeiten, ist entweder die map.apps User Management Extension oder der security.manager erforderlich. Die map.apps User Management Extension fügt eine zusätzliche Registerkarte im map.apps Manager hinzu, mit der beliebig viele Benutzer und Benutzerrollen verwaltet werden können. Im Hintergrund arbeitet dabei eine eingeschränkte Version des security.manager.

Für die Verwaltung und Konfiguration von Apps gibt es dabei wie in der map.apps Kernanwendung auch in der User Management Extension die beiden Rollen "maAdministrator" und "maEditor".

Benutzerrollenbasierte Konfiguration von Apps

Neben der Absicherung von Kartendiensten können mit Hilfe der map.apps User Management Extension oder security.manager auch map.apps Apps und App-Konfigurationen rollenbasiert erweitert, verändert oder eingeschränkt werden. So kann beispielsweise der Zugriff von bestimmten Benutzern auf Apps geregelt werden. Oder es können Funktionen, etwa die Editierung, für bestimmte Benutzerrollen deaktiviert werden.

Steuerung von Werkzeugen

"Tools" oder "Werkzeuge" in map.apps sind Komponenten, mit denen bestimmte Funktionen ein- und ausgeschaltet oder ausgelöst werden können. Mit einem Tool kann beispielsweise die Funktion zur Selektion eines Gebietes in der Karte eingeschaltet werden. Ein anderes Tool öffnet einen Druckdialog. Tools bilden somit die Einstiegspunkte für fast alle erweiterten Funktionen. Um bestimmte Funktionen einer App auf eine Gruppe von Benutzern einzuschränken, können in map.apps sogenannte "Tool Rules" verwendet werden. Neben vielen weiteren Tool Rules für andere Bedingungen gibt es Tool Rules, die Tools in Abhängigkeit von der Benutzerrolle des aktuellen Benutzers verändern können. Ein Tool kann dabei zum Beispiel ausgeblendet oder inaktiv geschaltet werden, sodass es für den Benutzer nicht mehr sichtbar ist oder nicht mehr angesteuert werden kann. Hier ist ein Beispiel für eine Tool Rule, die das Drucken-Tool nur dann einblendet, wenn der Benutzer die Rolle des map.apps-Administrators maAdmin besitzt.

"toolrules": {
  "ToolRuleManager": {
    "_rules": {       
      "agsprinttool": {
        "roles": ["maAdmin"],
        "ruleSuccessProperty": "visibility"
      }          
    }
  }
}

In diesem Beispiel wird die Eigenschaft "visibility" des Tools geschaltet. Weitere mögliche Eigenschaften sind "active", um das Tool ein- oder auszuschalten, und "enabled", um das Tool auszugrauen, sodass es nicht mehr angeklickt werden kann. Auf diese Weise können alle in der App verfügbaren Tools gesteuert werden und der Funktionsumfang einer App so einfach eingeschränkt werden.

Vollständige Manipulation der App-Konfiguration

Für weitergehende Ansprüche kann die Konfiguration einer App noch feingranularer gesteuert werden, allerdings ist dies nur mit Apps möglich die im Dateisystem abgelegt und nicht über den map.apps Manager verwaltet werden. Es ist möglich, jedes einzelne Konfigurationsattribut von beliebigen Bundlekomponenten zu steuern. Um eine solche Konfiguration umzusetzen, erhält die zentrale Konfigurationsdatei für eine App, die app.json-Datei, die Endung „jsp“ (JavaServerPage). Der Inhalt dieser Datei ist weiterhin die JSON-Beschreibung der App-Konfiguration. Als JSP-Datei können in der Datei jedoch bestimmte „Tags“ verwendet werden, die der Server auswertet, bevor er die App-Konfiguration an map.apps ausliefert. Diese Tags werten die Benutzerrolle des aktuell angemeldeten Benutzers aus und entfernen so Teile aus der App-Konfiguration, fügen andere Teile hinzu oder ersetzen sie.

Das folgende Beispiel enthält einen Ausschnitt aus einer app.jsp-Datei. Hier wird das Bundle „selection“ in der App nur zur Verfügung gestellt, wenn der aktuell angemeldete Benutzer die Rolle „sM_Administrator“ besitzt:

{
  "load": {
    "allowedBundles": [
      "system",
      "themes",
      "windowmanager",
      <s:isInRole role="sM_Administrator">"selection",</s:isInRole>
      "authentication"
  ]
},
"bundles": {
  ...
}

Entsprechend kann so auch die Konfiguration einer Komponente feingranular angepasst werden. Über das JSP-Tag im diesem Beispiel wird festgelegt, dass Benachrichtigunegen über eine neue Position für das LocateMe-Bundle nur für Benutzer mit der Rolle „sM_Administrator“ angezeigt werden. 

"locateme": {
  "LocateMe": {
    "showPositionLogs": <s:isInRole role ="sM_Administrator">true</s:isInRole>
    <s:isNotInRole role ="sM_Administrator">false</s:isNotInRole>
  }
}

Eine weitergehende Beschreibung zur Einrichtung einer app.jsp-Datei finden Sie unter [2] im Abschnitt „Role Based Functionality“.

Zusätzliche Sicherheitsfunktionen mit dem security.manager

Mit der User Management Extension lassen sich Benutzer und Benutzerrollen verwalten. Um darüber hinaus auch den Zugriff auf Kartendienste abzusichern, Single Sign-On-Szenarien oder Föderationen zu realisieren, ist der security.manager erforderlich. Auch das Drucken von geschützten Diensten wird mit Hilfe des security.manager möglich.

Zugriffsteuerung für Kartendienste

Das Absichern von Kartendiensten ist die gebräuchlichste Funktion von security.manager im Zusammenspiel mit map.apps. Dabei wird security.manager zwischen map.apps und die Kartendienste geschaltet. map.apps greift dann nicht mehr direkt auf die Kartendienste zu, sondern nur noch auf entsprechende Endpunkte, die von security.manager bereitgestellt werden. security.manager entscheidet, ob der Zugriff auf eine bestimmte Kartenressource erlaubt wird oder nicht. Falls der Zugriff erlaubt wird, leitet security.manager die Kartenanfrage an den dahinterliegenden Kartendienst weiter und gibt das Ergebnis dann an map.apps zurück (siehe Abbildung).

Einschränkung der Sicht auf Kartendienste

Der security.manager erlaubt einen feingranularen Zugriffsschutz auf räumlichen Dienste und ist damit einzigartig. Während die meisten Systeme nur einen grundlegenden ja/nein-Zugriffsschutz bieten, besitzt security.manager einen Filterungsmechanismus, der einen allgemeinen Zugriff auf einen Dienst erlaubt, dabei aber Inhalte individuell für verschiedene Benutzer filtern kann. Auf diese Weise können Inhalte genau auf einzelne Benutzer abgestimmt werden und können selbst innerhalb eines einzigen Dienstes variieren. In Abhängigkeit von der Benutzerrolle können räumliche Gebiete, einzelne Kartenebenen, Geoobjekte und Attribute sichtbar oder unsichtbar geschaltet werden.

Ein klassischer Anwendungsfall könnte ein Kartendienst sein, der Informationen zu Eigentumsverhältnissen bereitstellt, die in Verbindung mit einem Pipeline-Projekt stehen. Das Pipeline-Unternehmen hat Zugriff auf alle Ebenen, Geoobjekte und Attribute diese Dienstes. Gleichzeitig könnte der Dienst vertrauliche Informationen enthalten, die für Subunternehmer nicht einsehbar sein sollen. Durch das Einrichten einer passenden Benutzerrollen-Struktur könnten Mitarbeiter solcher Subunternehmen denselben Dienst nutzen, dabei jedoch nur auf die Gebiete zugreifen, der ihrem Arbeitsgebiet entsprichen. Sie sähen nur diejenigen Kartenebenen, die für ihren Aufgabenbereich erforderlich sind. Solche Attribute, die vertrauliche Informationen zu Grundbesitzverhältnissen enthalten, wären für sie geperrt. Es muss nur ein einziger Dienst vorgehalten werden, der einen Dienst-Endpunkt für Apps bereitstellt und security.manager steuert, passend zur Rolle und den Rechten des zugreifenden Benutzers, völlig transparent den Inhalt der ausgelieferten Daten.

security.manager kann entweder eine Authentifizierung anfordern oder einen Gastzugriff auf einen Dienst gewähren, bei dem keine Benutzeranmeldung erforderlich ist. Auch beim Gastzugriff werden die Zugriffsrichtlinien, wie sie der Administrator zuvor definiert hat, weiterhin durchgesetzt. Da die Schnittstellen der geschützten Dienst-Endpunkte den Schnittstellen der ungeschützten Dienste gleichen, sind keine besonderen Einstellungen auf Seiten der zugreifenden Anwendungen nötig.

Zugriff auf Kartendienste mit Benutzeranmeldung

Bei einer engeren Integration von map.apps und security.manager kann security.manager auch als Authentifizierungspunkt eingesetzt werden. Benutzer können sich innerhalb von map.apps mit Benutzername und Passwort anmelden. Diese Daten werden an security.manager gesendet, dort überprüft und im Erfolgsfall der Zugriff auf die Kartendienste gewährt. Nach der Authentifizierung des Benutzers wird im Browser, in dem map.apps ausgeführt wird, ein Domain-Cookie gesetzt, dass bei jeder Anfrage an den Server mitgeschickt wird und sozusagen als Ausweis dient.

Um ein solches Verhalten zu erzielen, ist eine weitergehende Konfiguration von map.apps und security.manager notwendig. Als Authentifizierungsmethode für die Kartendienste wählt man in security.manager die Option „SSO“. Die Dienstkonfiguration in map.apps unterscheidet sich dann von einer ungesicherten Konfiguration lediglich darin, dass als URL zu dem Kartendienst die von security.manager bereitgestellte SSO-URL verwendet wird.

Beispielkonfiguration für einen SSO-geschützten Dienst in map.apps:

{
  "id":"secured_countries",
  "type":"AGS_DYNAMIC",
  "url":"https://myserver:443/wss/service/myAGS/sso/MyData/MapServer",
  "layers":[{
    "id":"3",
    "title":"Countries
  }]
}

Drucken mit security.manager und dem ArcGIS for Server PrintTasks

Das Drucken von Kartendiensten mit Hilfe des ArcGIS for Server PrintTasks erfordert besondere Einstellungen, wenn die zu druckenden Kartendienste mit Hilfe von security.manager abgesichert wurden.

Grundlegende Funktionsweise des ArcGIS for Server PrintTasks

Um einen Dienst mit Hilfe des PrintTasks zu drucken, werden die Karten nicht direkt von map.apps an den PrintTask geschickt. Stattdessen werden dem PrintTask lediglich die URLs zu den gewünschten Kartendiensten und einige zusätzliche Daten, wie der zu druckende Kartenausschnitt, der Maßstab, die zu druckenden Kartenebenen und deren Reihenfolge mitgeteilt. Der PrintTask führt dann mit diesen Information selbst die notwendigen Anfragen an den Kartendiensten aus und bettet die erhaltenen Kartenbilder in das Druckdokument ein. Wenn die Kartendienste durch security.manager abgesichert sind, muss daher sichergestellt werden, dass auch der PrintTask Zugriff auf diese Kartendienste hat. 

Im folgenden Abschnitt wird beschrieben, wie die map.apps-App und security.manager konfiguriert werden müssen.

Konfiguration für den PrintTask in map.apps und security.manager

Für alle geschützten Kartendienste, die für das Drucken verwendet werden sollen, muss im security.manager die Authentifizierungsmethode „agstoken“ aktiviert sein. Dies ist erforderlich, damit der PrintTask später Zugriff auf diese Dienste erhalten kann. Außerdem muss der PrintTask in security.manager als GeoProcessing-Dienst eingerichtet sein und die Rechte erzeugt werden, damit ein map.apps-Benutzer den PrintTask ansprechen kann. 

Die URL, die vom security.manager für den PrintTask zur Verfügung gestellt wird, muss dann im map.apps Manager in der App-Konfiguration eingestellt werden. Dazu wird die „url“-Eigenschaft der PrintingController-Komponente im agsprinting-Bundle wie im folgenden Beispiel gesetzt:

"agsprinting": {
  "PrintController": {
  "url": "http://[...]/GPServer/Export%20Web%20Map"
}

Wenn nun aus map.apps heraus der PrintTask aufgerufen wird und auf einen mit security.manager geschützten Kartendienst zugegriffen wird, werden alle URLs auf die Kartendienste, die dem PrintTask als Parameter mitgeteilt wurden, durch URLs auf die agstoken-Athn-Endpunkte der Kartendienste ersetzt. Zusätzlich werden die URLs um einen token-Parameter erweitert, der ein zum zugreifenden Benutzer passendes Token enthält. Mit diesem Token wird dann der Zugriff auf die geschützten Kartendienste für den PrintTask ermöglicht.

Einschränkungen

Das Drucken von geschützten Diensten mit Hilfe des PrintTasks funktioniert nur, wenn die Kartendienste auf derselben Instanz von security.manager eingerichtet sind, wie der Endpunkt für den PrintTask. Eine Nutzung von Kartendiensten, die von einer anderen Instanz von security.manager geschützt werden als der PrintTask, ist nicht möglich.

Funktionsmatrix

 

map.apps

map.apps mit User Management Extension

map.apps kombiniert mit security.manager

Authentifizierung für ArcGIS Online-Inhalte

Apps vor unberechtigtem Zugriff schützen

begrenzt auf Administrator und Editor

feingranular über Benutzerrollen

feingranular über Benutzerrollen

Benutzerrollenbasierte App-Konfigurationen

Benutzerrollen

Administrator und Editor

Benutzeranzahl für App-Verwaltung

2 (Administrator und Editor)

beliebig viele

beliebig viele

Benutzerrollen für App-Verwaltung

Administrator und Editor

Administrator nd Editor

Single Sign-On und SAML 2

Föderationen

Kartendienste schützen

Weiterführende Informationen (Login erforderlich)

[1] Dokumentation zur Einrichtung von geschützten Karten aus ArcGIS Online

[2] Erstellung einer app.jsp-Seite für eine erweiterte Absicherung von App-Funktionen