Ich habe eine ArcGIS 10.1 Server-Instanz, die gesicherte Kartendienste im Internet verfügbar macht. Ich muss eine Client-Anwendung (die ich derzeit mit der Version 3.3 der ArcGIS-JavaScript-API erstelle) codieren, damit der Benutzer diese gesicherten Webservices anzeigen kann:
Ich denke, dieses Online-ESRI-Beispiel ist ein guter Anfang.
Mein Wille ist es, den Benutzer nicht nach JEDER Karten-Authentifizierung fragen zu lassen, da ich bereits weiß, dass ALLE Karten-Services zu ihm gehören und daher für ihn unter demselben Benutzernamen und Passwort zugänglich sind. In meiner Vorstellung sollte die Aufforderung zur Eingabe von Anmeldeinformationen nur EINMAL erscheinen, und daher sollte der JS-Code die Anmeldeinformationen über einen REST-fähigen Anmeldeaufruf an jeden der Kartendienste weiterleiten. Mir scheint es nicht, dass die ArcGIS Server REST-API einen solchen Aufruf bereitstellt ... vielleicht irre ich mich.
Ist diese "REST-konforme" Methode zum Anmelden bei gesicherten Kartenservices mit ArcGIS Server möglich (um programmgesteuert auf gesicherte Services zugreifen zu können)? Wenn ja, kann jemand von Ihnen Beispiele oder Links zu Webressourcen bereitstellen, die dies erklären?
Antworten:
Endlich habe ich gefunden, wonach ich gesucht habe: Einen richtigen ArcGIS Server-Web-Endpunkt, mit dem ich Token generieren kann!
Der Aufruf lautet:
Dadurch wird das Token an den HTTP-Antworttext zurückgegeben, und es kann an gesicherte Ressourcen gesendet werden, ohne dass erneut Anmeldeinformationen abgefragt werden müssen. Das Token muss der Wert für den
Cookie
Anforderungsheader sein, da es derzeit auf der Clientseite in einem Cookie gespeichert ist.Aber ... verdammt ! Dieser Token-Generator ist NICHT Bestandteil der ArcGIS Server REST-API !!! Ich konnte es in der Online-API-Dokumentation nicht finden ! Wo auf der Welt konnte ich es finden ???
Dies bedeutet, dass ArcGIS Server kein RESTful-Authentifizierungsframework hat.
Wenn wir diesen Karten-Service beispielsweise unter der ArcGIS REST-API verfügbar machen
/arcgis/rest/services/myDir/myMapService/MapServer/layers
und versuchen, diese Ressource abzurufen , erhalten wir von ArcGIS Server eine Antwort mit einem200: OK
Statuscode und einem HTML-Dokument im Hauptteil (das HTML ist ein Anmeldeformular) ). Bei einem REST -fähigen Login würde ich erwarten, dass die Anfrage mir einen401: Authentication Required
Statuscode und einenWWW-Authenticate
Header zurückgibt ... Ich habe das Ganze selbst mit einem REST-Client-Programm getestet.quelle
Schauen Sie sich an, wie ArcGIS Server Security funktioniert.
Grundsätzlich müssen Sie Benutzer und Gruppen einrichten und einem bestimmten Benutzer Rechte für bestimmte Dienste erteilen.
Sobald Sie dies getan haben, müssen Sie die auf Token basierende Sicherheit in Ihrer JavaScript-Anwendung verwenden. Dies bedeutet, dass Sie den Benutzer nach seinem Benutzernamen und Kennwort fragen. Dies wird an den ArcGIS-Server gesendet, der die Anmeldeinformationen überprüft und ein Token zurücksendet. Dieses Token wird verwendet, um den Benutzer zu validieren, wenn eine Ressource angefordert wird.
Sie als Programmierer senden dieses Token an jeden Kartendienst, Abfragedienst usw.
Auf dieser Seite erfahren Sie, wie Sie Token Based Services verwenden .
Die ArcGIS-JavaScript-API enthält bereits eine Klasse, den IdentityManager , um dies zu tun.
Im Folgenden finden Sie einige Beispiele zur Verwendung des Identity Managers.
quelle
In der ArcGIS-API für JavaScript gibt es ein Widget mit dem Namen Identity Manager , das genau das angibt, was Sie tun möchten. Sehen Sie sich Beispiele an, die den Identitätsmanager verwenden, um zu sehen, wie es funktioniert.
Das von Devdatta verknüpfte Beispiel ist zwar gültig, stellt jedoch die Möglichkeit vor Identity Manager dar und umfasst viel mehr Code, der jetzt erforderlich ist, da die Authentifizierung für sichere Dienste in die API integriert wird.
quelle
Sie können auch Proxy verwenden, sodass Ihre Anwendung niemals zur Eingabe von Benutzername und Kennwort auffordert. Und Sie müssen Token nicht so einstellen, dass Sie immer auf gesicherte Dienste zugreifen, wenn Sie darauf zugreifen. Sie müssen lediglich in Ihrer JS-Datei Folgendes festlegen: esriConfig.defaults.io.proxyUrl = "/proxy.ashx"; (z. B. http: //localhost//DotNet/proxy.ashx ; esriConfig.defaults.io.alwaysUseProxy = true; und stellen Sie in Ihrer proxy.config-Datei alle Dienste bereit, die Sie in Ihrer Anwendung verbrauchen.
Siehe https: //github.com/Esri/resource-proxy/ für weitere Informationen zum Proxy. Wenn Sie eine tokenbasierte Authentifizierung wünschen, müssen Sie in Ihrer proxy.config-Datei nur URL, Benutzername, Kennwort und matchAll-Inhalt hinzufügen.
quelle