Програмна автентифікація на захищених шарах ArcGIS Server через API RESTful


16

У мене є екземпляр сервера ArcGIS 10.1, який відкриває захищені сервіси карт в Інтернеті. Мені потрібно скопіювати клієнтську програму (яку я зараз будую, використовуючи версію 3.3 API ArcGIS Javascript), що дозволяє користувачеві переглядати захищені веб-сервіси:

Я думаю, що цей інтернет-приклад ESRI - це гарний початок.

Я не хочу, щоб користувач запросив на аутентифікацію EACH для кожного сервісу карт, тому що я вже знаю, що ВСІ сервіси карт належать їй / йому, і тому вони отримують доступ до неї під тим самим ім'ям користувача та паролем. На мій погляд, запит на отримання облікових даних повинен відображатись лише ТАКІ, і тому JS-код повинен подавати облікові дані для кожної служби служби карт через якийсь виклик RESTful входу. Мені не здається, що API REST ArcGIS Server надає такий дзвінок ... можливо, я помиляюся.

Чи можливо цей "РЕСТЕВНИЙ" спосіб увійти в захищені сервіси карт з допомогою ArcGIS Server (що дозволяє програмно отримувати доступ до захищених послуг)? Якщо так, чи може хтось із вас надати приклади чи посилання на веб-ресурси, що пояснюють це?


Будь ласка, повідомте нас про версію сервера ArcGIS GIS Server (10.0 АБО 10.1) ??
Суніль

Суніл, я забув це написати, це 10,1!
csparpa

1
ти використовуєш магазин безпеки arcgis, а не Windows Auth?
Бред Несом

@Brad Nesom на даний момент мій екземпляр ArcGIS Server використовує вбудований сховище безпеки (з користувачами та ролями), але я планую зв’язати цей примірник із зовнішнім сервером LDAP для автентифікації
csparpa

Відповіді:


11

Нарешті я знайшов те, що шукав: належну кінцеву точку веб-сервера ArcGIS, яку я міг би використовувати для створення жетонів!

Дзвінок такий:

GET http://<arcgisserver_host:port>/arcgis/tokens?request=getToken&username=<usr>&password=<usr>&expiration=<token_lifespan>

який повертає маркер до органу відповідей HTTP, і він може надіслати його разом з будь-яким подальшим запитом до захищених ресурсів, не вимагаючи повторного отримання облікових даних. Маркер повинен бути значенням Cookieзаголовка запиту, оскільки він наразі зберігається у файлі cookie на стороні клієнта.

Але ... чорт ! Цей генератор токенів НЕ є частиною API REST ArcGIS Server !!! Я не зміг її знайти в документації онлайн-API ! Де в світі я міг його знайти ???

Це означає, що сервер ArcGIS не має рамки аутентифікації RESTful.

Наприклад, якщо у нас є ця служба обслуговування карт під API ArcGIS REST: /arcgis/rest/services/myDir/myMapService/MapServer/layersі ми намагаємось отримати цей ресурс, те, що ми отримуємо від ArcGIS Server, - це відповідь, що 200: OKмає код статусу та документ HTML у тілі (HTML - форма входу ). Від можливого входу в систему, я б очікував, що запит поверне мені 401: Authentication Requiredкод статусу разом із WWW-Authenticateзаголовком ... Я перевірив все це сам, використовуючи клієнтську програму REST.


3
На жаль, більшість "RESTful" реалізацій не є RESTful :) Деякі роки тому я відмовився від того, щоб бути дуже суворим щодо цього, бо правда полягає в тому, що більшість реалізацій є "REST-like". Для вашого конкретного випадку, як правило, я використовую інший підхід. Я використовую вбудовану систему аутентифікації за вибором і проксі відкриті запити ArcGIS. Отже, якщо я обробляв автентифікацію за допомогою аутентифікації Django, або ruby's, або .net чи іншої, я використовую цю систему. Потім, коли ця система скаже, що це нормально, ви можете проксі просити внутрішній сервер / порт ArcGIS, який заблокований для зовнішнього світу.
Рагі Ясер Бурхум

2
Привіт @Ragi Ясер Бурхум, ти маєш рацію: ми ніколи не будемо жити в цілком РЕСТИВНОМУ світі ;-) Я також розглядав такий підхід, як ваш: мені подобається ідея проксі-сервера (який також міг би обробляти запити до веб-сервісів, окрім сервера ArcGIS , а також), але мені потрібно зберегти складність усієї архітектури як можна менше. Отже, виявивши, що існує прямий спосіб програмної автентифікації користувачів на сервісі map, я пройду його! Все одно, дякую!
csparpa

Можливо, це занадто давнє запитання, але, сподіваємось, ви можете побачити, що API Esri REST тепер має метод GenerateToken: resources.arcgis.com/en/help/arcgis-rest-api/index.html#//…
Натан Ву

7

Перегляньте, як працює безпека сервера ArcGIS.

По суті, вам потрібно буде створити користувачів та групи та надати певні права Користувача на певні послуги.

Коли ви зробите це, то вам потрібно використовувати безпеку на основі токена у вашій програмі JavaScript. Це означає, що ви запитуєте у Користувача його ім’я користувача та пароль. Це надсилається на сервер ArcGIS, який перевіряє облікові дані, і повертає маркер. Цей маркер використовується для перевірки користувача кожного разу, коли запитується ресурс.

Ви як програміст надішлете цей маркер кожному сервісу карт, службі запитів тощо.

На цій сторінці детально описано, як користуватися послугами на основі маркера .

API JavaScript ArcGIS вже поставляється з класом, IdentityManager для цього.

Ось кілька зразків, як використовувати диспетчер ідентичності.


3

В API ArcGIS для JavaScript є віджет під назвою Менеджер ідентичності, який відповідає саме тому, що ви хочете зробити. Перегляньте зразки, які використовують менеджер ідентичності, щоб побачити, як він працює.

Зразок, пов'язаний Devdatta, хоч і є дійсним, є способом цього зробити менеджером перед ідентичністю і включає в себе набагато більше коду, який необхідний тепер, коли автентифікація для захищених служб входить в API.


1
Я щойно взяв зразок посилання на документацію ESRI. Чи можна оновити документацію, щоб вказати на нові зразки?
Devdatta Tengshe

2
Люди, дякую за ваші підказки, але я думаю, ви не зрозуміли мою думку. Сценарій такий: мій користувач отримає доступ до N захищених сервісів карт, а це означає, що він буде турбуватися N разів із запитом на вхід. Оскільки до ВСІХ картсервісів користувачів можна отримати доступ за допомогою тих самих облікових даних, я хотів би, щоб моя програма запитала ПРОСТО ДЛЯ їх, а потім використовувати їх для автоматичної автентифікації кожної служби обслуговування карт. На цьому етапі я думаю, що я повинен використовувати проксі- сторінку для обробки декількох аутентифікацій служби сервісу з ArcGIS Server. Звучить добре? Якась відверта альтернатива? Заздалегідь дякую, сподіваюсь, я зрозумів свої потреби ..
csparpa

2

Ви також можете використовувати проксі, тому ваша програма ніколи не вимагатиме ввести ім’я користувача та пароль. І вам не потрібно налаштовувати Token на доступ до захищених служб кожного разу, коли ви звертаєтесь до них. Єдине, що вам потрібно зробити, - це у своєму файлі JS встановити наступне: esriConfig.defaults.io.proxyUrl = "/proxy.ashx"; (Наприклад ,. Http: //localhost//DotNet/proxy.ashx ; esriConfig.defaults.io.alwaysUseProxy = правда, і в файлі proxy.config, надають усі послуги , які ви споживаєте в вашому додатку.
Див https: //github.com/Esri/resource-proxy/ для отримання більш детальної інформації про проксі.Як ви хочете аутентифікацію на основі лексеми, у свій файл proxy.config потрібно додати лише URL-адресу, ім’я користувача, пароль та matchAll.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.