У меня есть экземпляр ArcGIS 10.1 Server, который предоставляет защищенные картографические сервисы в Интернете. Мне нужно написать код клиентского приложения (которое я сейчас создаю с использованием версии 3.3 ArcGIS Javascript API), позволяющего пользователю просматривать эти защищенные веб-сервисы:
Я думаю, что этот онлайн-пример ESRI - хорошее начало.
Я не хочу, чтобы пользователь запрашивал КАЖДУЮ аутентификацию mapservice, потому что я уже знаю, что ВСЕ картографические услуги принадлежат ей / ему и поэтому доступны ему / ей под тем же именем пользователя и паролем. По моей идее, запрос учетных данных должен отображаться только ОДИН РАЗ, и поэтому код JS должен передавать учетные данные каждому из картографических сервисов через своего рода вызов входа в RESTful. Мне не кажется, что ArcGIS Server REST API обеспечивает такой вызов ... возможно, я ошибаюсь.
Следовательно, возможен ли этот «RESTful» способ входа в защищенные картографические сервисы с помощью ArcGIS Server (позволяющий программно получать доступ к защищенным сервисам)? Если да, может ли кто-нибудь из вас предоставить примеры или ссылки на веб-ресурсы, объясняющие это?
Ответы:
Я наконец-то нашел то, что искал: подходящую конечную точку веб-сервера ArcGIS Server, которую я мог бы использовать для генерации токенов!
Вызов такой:
который возвращает токен в тело ответа HTTP, и его можно отправить вместе с любым дальнейшим запросом к защищенным ресурсам без повторного запроса учетных данных. Токен должен быть значением для
Cookie
заголовка запроса, так как он в настоящее время хранится в файле cookie на стороне клиента.Но ... черт ! Этот генератор токенов НЕ является частью API REST ArcGIS Server !!! Я не смог найти его в онлайн-документации по API ! Где в мире я мог найти это ???
Это означает, что ArcGIS Server не имеет инфраструктуры аутентификации RESTful.
Например, если у нас есть этот mapservice, предоставляемый через ArcGIS REST API:
/arcgis/rest/services/myDir/myMapService/MapServer/layers
и мы пытаемся получить этот ресурс, то мы получаем от ArcGIS Server ответ с200: OK
кодом состояния и HTML-документом в теле (HTML-это форма входа в систему). ). От ожидаемого входа в RESTful я бы ожидал, что запрос вернул мне401: Authentication Required
код состояния вместе сWWW-Authenticate
заголовком ... Я сам все это проверил, используя клиентскую программу REST.источник
Пожалуйста, ознакомьтесь с тем, как работает ArcGIS Server Security.
По сути, вам нужно будет создавать пользователей и группы, а также предоставлять конкретному пользователю права на определенные сервисы.
Как только вы это сделаете, вам нужно будет использовать безопасность на основе токенов в вашем приложении JavaScript. Это означает, что вы запрашиваете у пользователя имя пользователя и пароль. Это отправляется на ArcGIS Server, который проверяет учетные данные и отправляет обратно токен. Этот токен используется для проверки пользователя всякий раз, когда запрашивается ресурс.
Вы, как программист, будете отправлять этот токен каждому картографическому сервису, сервису запросов и т. Д.
На этой странице подробно описано, как использовать сервисы на основе токенов .
ArcGIS Javascript API уже поставляется с классом, IdentityManager для этого.
Вот несколько примеров использования Identity Manager.
источник
В ArcGIS API for JavaScript есть виджет, называемый Identity Manager, который точно соответствует тому, что вы хотите сделать. Посмотрите примеры, которые используют менеджер удостоверений, чтобы увидеть, как он работает.
Образец, связанный с Devdatta, хотя и является действительным, является способом Pre-Identity Manager, позволяющим сделать это, и включает в себя намного больше кода, необходимого сейчас, когда аутентификация для защищенных служб встроена в API.
источник
Вы также можете использовать прокси, поэтому ваше приложение никогда не будет запрашивать имя пользователя и пароль. И вам не нужно устанавливать токен для доступа к защищенным сервисам, когда вы к ним обращаетесь. Единственное, что вам нужно сделать, это в вашем файле JS установить следующее: esriConfig.defaults.io.proxyUrl = "/proxy.ashx"; (например, http: //localhost//DotNet/proxy.ashx ; esriConfig.defaults.io.alwaysUseProxy = true; и в своем файле proxy.config укажите все службы, которые вы используете в своем приложении.
См. https: //github.com/Esri/resource-proxy/ для получения более подробной информации о прокси- сервере.Так как вы хотите аутентификацию на основе токенов, в вашем файле proxy.config вам нужно добавить только URL, имя пользователя, пароль и содержимое matchAll.
источник