Авторизация в ArcGIS Online и Portal for ArcGIS

advertisement
Авторизация в ArcGIS Online и Portal for ArcGIS с точки
зрения разработки приложений
При обращении к закрытым ресурсам, которые хранятся на ArcGIS Server, ArcGIS Online
или Portal for ArcGIS и защищены паролем, происходит аутентификация и авторизация
пользователя, т.е. проверка соответствия пароля имени пользователя и выдача
пользователю прав на доступ к ресурсу в случае успешной проверки.
Набор прав, являющийся результатом авторизации конкретного, закодирован в токене –
кодовой строке доступа к ресурсу, токен имеет ограниченный срок действия.
Если обращение к закрытым ресурсам происходит из внешнего приложения, то
разработчик должен позаботиться о том, чтобы приложение получило токен доступа к
закрытым ресурсам платформы ArcGIS (под платформой ArcGIS в этой статье понимается
либо ArcGIS Server, либо портал, а под порталом – ArcGIS Online или Portal for ArcGIS), т.е.
авторизовалось в платформе ArcGIS (будем для краткости использовать термин
авторизация, понимая под ним вместе идентификацию, аутентификацию и авторизацию
как последовательный процесс).
По способу авторизации в платформе ArcGIS приложения делятся на два типа:


Авторизация от имени пользователя платформы ArcGIS:
 пользователи приложения являются пользователями платформы
 авторизация пользователя в платформе происходит посредством приложения
 пользователь должен передать свои учетные данные (логин и пароль)
Авторизация от имени приложения:
 пользователи приложения неизвестны платформе
 авторизация приложения в платформе происходит от имени приложения
 приложение должно передать учетные данные приложения (логин и пароль).
Для реализации авторизации от имени пользователя платформы ArcGIS в ArcGIS Web SDK
(JavaScript, Silverlight, Flex) и ArcGIS Runtime SDK (iOS, Android, Windows Phone, WPF, Java)
разработчику доступен компонент IdentityManager. На рис. 1 представлена общая схема
работы приложения, в которой авторизация выполняется с помощью IdentityManager:





при первом обращении к закрытому ресурсу IdentityManager выводит диалоговое
окно, в котором пользователь вводит логин и пароль (1);
IdentityManager передает логин и пароль пользователя в платформу ArcGIS (2);
служба токенов (подсистема генерации токенов) платформы ArcGIS производит
авторизацию пользователя (3) и генерирует токен;
сгенерированный токен передается обратно в приложение (4);
при каждом обращении к закрытому ресурсу IdentityManager подставляет токен в
конце запроса ArcGIS REST API (5).
Если приложение работает без IdentityManager, то разработчик должен вставить
соответствующий код получения токена и затем подставлять токен в конце каждого
запроса к закрытым ресурсам.
В этом схеме есть два тонких места, в которых логин и пароль может быть перехвачен.
Первое, и самое очевидное – это передача логина и пароля по сети от приложения в
платформу ArcGIS (2). Это проблема обычно решается передачей данных по протоколу
HTTPS. Второе – это передача логина и пароля приложению (1), что обязывает
пользователя «доверять» приложению.
При авторизации от имени приложения приложение само выступает как пользователь
платформы ArcGIS и имеет свои логин и пароль для доступа к ресурсам платформы ArcGIS.
При этом может происходить авторизация пользователей на уровне приложения, но не на
уровне платформы ArcGIS, для которых эти пользователи остаются неизвестными. Логин и
пароль приложения как пользователя ArcGIS должно храниться в защищенном месте,
например, на стороне веб-сервера, если речь идет о веб-приложении.
Рисунок 1. Стандартная схема авторизации приложения в платформе ArcGIS Online.
В марте 2013 года в новом релизе ArcGIS Online была добавлена возможность аутентификации с
помощью OAuth 2. Эта же возможность будет в следующих версиях добавлена и в Portal for
ArcGIS. Далее в статье везде, где будет встречаться слово портал, под ним следует понимать как
ArcGIS Online, так и Portal for ArcGIS, но помнить, что в настоящий момент OAuth2 реализован
только в ArcGIS Online.
OAuth – это открытый протокол авторизации, который позволяет предоставить третьей стороне
ограниченный доступ к защищенным ресурсам пользователя без необходимости передавать ей
(третей стороне) логин и пароль. OAuth 2.0 – это последняя на настоящий момент версия
протокола. Применительно к разработке приложения под платформу ArcGIS, третьей стороной
является как раз приложение.
OAuth дает следующие преимущества:


Безопасность. При разработке приложения не нужно заботиться о конфиденциальности
логина и пароля пользователя. Логин и пароль не передаются приложению, а
следовательно, не могут попасть в руки злоумышленников;
Удобство для пользователей. Если сам пользователь авторизован на сервисе, ему не
нужно вводить логин и пароль повторно перед выдачей разрешения приложению.
Упрощенная схема авторизации от имени пользователя ArcGIS Online представлена на рис. 2:





Разработчик должен зарегистрировать приложение на портале, результатом регистрации
является идентификатор приложения APPID в системен идентификаторов портала (1);
Для авторизации на портале пользователь перенаправляется на сервер авторизации,
расположенный на портале (для ArcGIS Online сервер OAuth 2 находится на сайте
arcgis.com), и вводит свои логин и пароль в браузере (2);
Сервер OAuth 2 портала производит авторизацию пользователя, и в случае успеха
генерирует токен, содержащий информацию о правах, предоставленных приложению (т.е.
проводит авторизацию приложения) (3);
Токен высылается приложению (4);
Приложение подставляет токен в конце каждого запроса к закрытым ресурсам портала (5).
Рисунок 2. Авторизация OAuth 2 на портале ArcGIS Online.
Для того, чтобы приложение могло использовать OAuth 2 при авторизации на портале, оно
должно быть зарегистрировано на портале. Для регистрации приложения необходимо выполнить
следующие действия:
1. Залогиниться на портал (для ArcGIS Online – это arcgis.com) под учетной записью
разработчика или организации;
2. Добавить приложение (веб-, мобильное или настольное);
3. Зарегистрировать приложение, нажав кнопку «РЕГИСТРАЦИЯ» в описании приложения.
Зарегистрированному приложению присваивается идентификатор APPID (логин) и секретный
ключ (APPSECRET), которые нужно будет вставить в код приложения.
Существуют свои тонкости разработке приложений в случае если приложение авторизуется на
портале от имени пользователя портала или от своего имени.
Авторизация OAuth2 от имени пользователя портала
Авторизация приложения он имени пользователя портала несколько отличается для разных
случаев:
Перенаправление на сервер OAuth 2 происходит из клиентской части веб-приложений
(JavaScript, Flex, Silverlight и др.). При регистрации веб-приложения необходимо указать адрес
перенаправления в формате http://server[:port] – адрес веб-сервера, на котором
размещено веб-приложение, именно по этому адресу будет выслан сгенерированный токен.
Адресов перенаправления может быть несколько.
При обращении к закрытому сервису или ресурсу приложение перенаправляет пользователя по
ссылке для авторизации OAuth 2 на портале (ниже показан пример для ArcGIS Online):
При этом redirect_uri, передаваемый в запросе, должен включать один из
зарегистрированных адресов перенаправления. При совпадении учетных данных,
представленных пользователем и идентификатора приложения сервер авторизации выдает токен,
высылая его по адресу, указанному в redirect_uri, подставляя токен в конец
redirect_uri, например:
Вместе с токеном возвращается и время действия токена. По умолчанию оно равно двум часам,
однако, можно запросить и другое время в запросе, которое приложение пересылает на север
авторизации. Полученный токен необходимо передать IdentityManager, который будет
подставлять его в конец каждого запроса к закрытому ресурсу или сервису. По истечении срока
действия токена, IdentityManager вызовет повторную процедуру аутентификации.
Перенаправление на сервер OAuth 2 происходит из серверной части веб-приложения (PHP, JSP,
ASP.NET и др.). При регистрации веб-приложения необходимо указать адрес перенаправления в
формате http://server[:port] – адрес веб-сервера, на котором размещено вебприложение, именно по этому адресу будет выслан сгенерированный токен. Адресов
перенаправления может быть несколько.
Вдобавок, необходимо получить не только
идентификатор приложения APPID, но и пароль приложения APPSECRET.
Авторизация происходит в два шага: получение кода авторизации и получения токена.
Для авторизации приложение перенаправляет пользователя на сервер авторизации на портале,
например (для ArcGIS Online):
При совпадении учетных данных, представленных пользователем и идентификатора приложения
сервер возвращает код авторизации, перенаправляя браузер по ссылке redirect_uri и
подставляя код в конце этой ссылки, например:
Получив код авторизации, приложение должно обменять его на токен. Для этого оно делает еще
один
запрос
(методом
POST)
к
серверу
авторизации
по
ссылке
https://portal/sharing/oauth2/token, например (для ArcGIS Online):
В параметрах запроса (но не в самом URL) передаются идентификатор приложения, пароль
приложения и код авторизации, полученный на предыдущем шаге:
Ответ от сервера авторизации приходит в формате JSON и содержит токен, время действия токена
и токен обновления (последний используется для получения последующих токенов после
окончания срока их действия):
Перенаправление на сервер OAuth 2 происходит из мобильного или настольного Runtimeприложения (iOS, Android, WPF).
Пре регистрации мобильного и настольного приложения необходимо указать адрес
перенаправления. Для настольных приложений (WPF) – это специальное значение
urn:ietf:wg:oauth:2.0:oob. При регистрации настольного приложение это значение
указывается системой по умолчанию. Это значение дает понять серверу авторизации, что код
авторизации нужно прописать в заголовок окна браузера, из которого настольное приложение
считает этот код.
При регистрации мобильных приложений есть альтернативный способ – указать адрес
перенаправления на custom URL scheme мобильного приложения, например: xcom.mycorp.myapp://oauth.callback. В этом случае браузер вызовет обработчик
приложения после аутентификации.
Авторизация проходит в два шага, как и в предыдущем случае: получение кода авторизации и
получения токена.
Для авторизации приложение вызывает окно браузера и напрвляет пользователя на сервер
авторизации на портале, например (для ArcGIS Online):
При этом redirect_uri – это либо строка urn:ietf:wg:oauth:2.0:oob, либо
идентификатор мобильного приложения в custom URL scheme (например, com.mycorp.myapp).
Если использовалось специальное значение urn:ietf:wg:oauth:2.0:oob, то сервер
авторизации перенаправит браузер на страницу https://www.arcgis.com/sharing/outh2/approval
(для портала будет использован аналогичный URL), при этом пропишет код авторизации в
заголовке
окна
браузера.
Например,
по
ссылке
https://www.arcgis.com/sharing/outh2/approval/SplxlOBeZQQYbYS6WxSbIA будет сформирована
HTML-страница со следующим заголовком:
Приложение при этом может немедленно закрыть HTML-страницу, чтобы пользователь не мог
увидеть код авторизации.
Если же в качестве адреса перенаправления использовался идентификатор мобильного
приложения в custom URL scheme, то обработчик приложения отвечает за то, чтобы выдернуть код
авторизации из URL. Например, сервер авторизации можете перенаправить браузер по
следующему URL:
Получив код авторизации, приложение должно обменять его на токен. Для этого оно делает еще
один
запрос
(методом
POST)
к
серверу
авторизации
по
ссылке
https://portal/sharing/oauth2/token, например (для ArcGIS Online):
В параметрах запроса (но не в самом URL) передаются идентификатор приложения, пароль
приложения и код авторизации, полученный на предыдущем шаге:
Использование APPSECRET (пароля приложения) необязательно в этом случае, поскольку токен
генерируется по тройке (логин пользователя, пароль пользователя, идентификатор приложения).
Ответ от сервера авторизации приходит в формате JSON и содержит токен, время действия токена
и токен обновления (последний используется для получения последующих токенов после
окончания срока их действия):
В приложениях, которые не используют ArcGIS Runtime SDK, нужно следить за тем, чтобы токен
вставлялся в конце всех запросов ArcGIS REST API.
Авторизация OAuth2 от имени приложения
В случае если конечные пользователи приложения неизвестны платформе ArcGIS, приложение
авторизуется от своего имени. При этом необходимо использовать не только логин приложения
(APPID), полученный при его регистрации на портале, но и пароль (APPSECRET).
На разработчике лежит ответственность за то, чтобы ключ APPSECRET был недоступен
злоумышленникам (например, из кода приложения) – например, хранить пароль на стороне
защищенного от несанкционированного доступа веб-сервера.
Для получения токена приложение должно отправить POST-запрос,
https://www.arcgis.com/sharing/oauth2/token, с параметрами:
используя
URL
В данном случае параметр grant_type имеет тип client_credentials. В ответ сервер
авторизации портала пришлет токен, которые затем приложение будет подставлять в конце всех
запросов ArcGIS REST API.
Авторизация от имени приложения обычно подразумевает дополнительную авторизацию
пользователей на уровне приложения (т.е. пользователи, неизвестные платформе ArcGIS,
авторизуются в приложении под учетной записью приложения, не имеющей отношения к
платформе ArcGIS).
Авторизация на Portal for ArcGIS
В настоящий момент Portal for ArcGIS не поддерживает авторизацию OAuth 2, поэтому
необходимо использовать стандартную авторизацию через службу генерации токенов, о которой
речь шла в начале статьи. В одном из следующих релизов Portal for ArcGIS авторизация OAuth 2
будет поддерживаться аналогично ArcGIS Online.
Авторизация в корпоративном ArcGIS for Server
Если ArcGIS for Server не интегрирован с порталом (в случае Portal for ArcGIS), доступна только
стандартная авторизация на ArcGIS Server (через службу генерации токенов), авторизация OAuth 2
недоступна. То же касается и ArcGIS Online – если закрытый сервис ArcGIS for Server не
зарегистрирован как элемент ArcGIS Online, то авторизация при обращении к нему возможна
только стандартным способом через службу генерации токенов.
Если же закрытый сервис ArcGIS Server зарегистрирован в ArcGIS Online, то возможны два
сценария:


ArcGIS Online хранит логин и пароль доступа к сервису. Для доступа к этому сервису
пользователю необходимо ввести логин пароль для авторизации в ArcGIS Online, а ArcGIS
Online, используя логин и пароль для доступа к конкретному ресурсу ArcGIS for Server,
откроет пользователю доступ к нему.
ArcGIS Online не хранит логин и пароль доступа к сервису. Для доступа к этому сервису
пользователю необходимо сначала авторизоваться в ArcGIS Online через OAuth 2, а затем
авторизоваться для доступа к сервису через службу генерации токенов ArcGIS Server.
Точно такая же схема действует и для Portal for ArcGIS. При использовании первого способа
(портал хранит пароли доступа к сервисам ArcGIS for Server) пользователю достаточно только
авторизоваться на портале.
Преимущества использования OAuth 2
Что же дает использование OAuth 2?
В случае если данные пользователя хранятся в ArcGIS Online – безопасность при авторизации.
В случае если данные пользователя хранятся в ArcGIS for Server, и сервисы зарегистрированы в
ArcGIS Online либо ArcGIS for Server интегрирован с порталом – единое пространство
идентификаторов: пользователь авторизовался на портале, следовально он имеет доступ ко всем
ресурсам, для которых ему выдано разрешение, без необходимости каждый раз авторизоваться
при доступе к ресурсу.
Кроме того, на портале доступна статистика по каждому приложению: сколько кредитов
использовало приложение при обращении к сервисам от своего имени или от имени
зарегистрированных на портале пользователей.
Download