Разработка мультитенантных приложений на SAP Cloud Platform в среде Neo, часть 2: авторизация и аутентификация

  • Tutorial
Во второй статье из цикла про разработку приложений на SAP Cloud Platform в среде Neo мы затронем один из самых важных аспектов — управление авторизацией и аутентификацией пользователей.

В этой статье мы покажем, как установить связь между SAP Cloud Platform и провайдером идентификаций (IDP) воображаемого клиента «ABC PetroCorp», а также добавим пользователей в IDP. Далее мы рассмотрим, как назначить роли для пользователей из компании клиента в конкретном приложении (из IDP), а также — как настроить атрибуты SAML для их передачи из IDP в приложение облачной платформы SCP.

В суббакаунте вымышленного клиента «ABC PetroCorp» из первой статьи уже установлена подписка на приложения мониторинга загрязнения в SCP, предоставляемые «ITeLO Consulting». Теперь сотруднику «ABC PetroCorp» нужно сделать это приложение доступным для других коллег.

Пользователь SAP Cloud Platform может подключить свой корпоративный IDP к облачной платформе и настроить управление безопасностью и аутентификацией для своего приложения, загруженного в SCP.

Компания «ABC PetroCorp» подключила сервис SAP Cloud Platform Identity Authentication, который позволяет обеспечить доступ к бизнес-процессам, приложениям и данным. Этот сервис предоставляет собой SCI-тенант, внутри которого происходит конфигурация приложений и управление авторизацией пользователей.

У Эмили, воображаемого героя из первой статьи, есть доступ к данному SCI-тенанту — она является его администратором и может настраивать авторизацию пользователей в конкретном приложении. Она хочет разобраться в том, как создать эти конфигурации при помощи сервиса Identity Authentication.

Требования:

  • Продуктивный глобальный аккаунт SCP (не триальный) с подключённым к нему сервисом Identity Authentication (как IDP для субаккаунта «ABC PetroCorp»);
  • Пользователь суббакаунта клиента должны быть администратором SCI-тенанта, таким образом у него будет доступ к консоли администрирования сервиса Identity Authentication.

Эмили необходимо выполнить следующие шаги в консоли администрирования сервиса Identity Authentication и панели управления SCP, чтобы сделать приложение в облачной платформе доступным другим сотрудникам компании «ABC PetroCorp»:

Шаг 1: Установка доверительных отношений между SCI-тенантом и субаккаунтом SCP.
Шаг 2: Импорт пользователей в SCI-тенант и обновление (добавление) необходимых атрибутов.
Шаг 3: Назначение ролей пользователям на уровне приложения в SCP.
Шаг 4: Настройка атрибутов в SCI-тенанте и панели управления SCP для их передачи в приложение.
Шаг 5: Проверка настроек.


Шаг 1: Установка доверительных отношений между SCI-тенантом и субаккаунтом SCP

Эмили является администратором субаккаунта «ABC PetroCorp» и SCI-тенанта, что дает ей возможность применить необходимые настройки для использования SCI-тенанта в качестве «хранилища пользователей» для мультитенантного приложения, предоставляемого провойдером «ITeLO Consulting».

Для начала Эмили необходимо установить доверительные отношения между SCI-тенантом и субаккаунтом SCP клиента «ABC PetroCorp».

Перейдем к консоли администрирования сервиса Identity Authentication, воспользовавшись ссылкой «https://.accounts.ondemand.com/admin», где — это идентификатор SCI-тенанта. Эту ссылку можно найти в регистрационном письме, которые приходит администратору тенанта сервиса Identity Authentication. Там же обозначен и идентификатор тенанта.

Консоль администрирования сервиса Identity Authentication выглядит следующим образом:



В другой вкладке браузера откроем панель управления для субаккаунта клиента «ABC PetroCorp» и перейдем во вкладку «Security» -> «Trust».



В открывшемся меню «Trust Management» переходим во вкладку «Local Service Provider» и нажимаем «Edit».



Затем выполняем следующие шаги:

  • В поле «Configuration Type» меняем тип на «Custom»;
  • Нажимаем «Generate Key Pair» для создания ключа и сертификата для учетной записи;
  • Меняем значение в поле «Principal Propagation» на «Enable»;
  • Нажимаем «Save».



Нажимаем на «Get Metadata», чтобы скачать файл метаданных в формате «xml», который содержит ранее описанные конфигурации. Он будет использован для установления доверительных отношений с SCI-тенантом.

Вернемся к консоли администрирования сервиса Identity Authentication и перейдем в вкладку «Applications & Resources» -> «Applications» в меню слева. В области «Applications» нажимаем кнопку «Add», чтобы обозначить новое приложение, развернутое в субаккаунте «ABC PetroCorp».



В появившемся окне вводим имя приложения (например, ABC_PetroCorp_IDP) и нажимаем «Save». После этого в тенанте для нашего приложения будет создана новая точка.

В созданном приложении переходим во вкладку «Trust» и выбираем параметр «SAML 2.0 Configuration».



В разделе «Define from Metadata» нажимаем «Browse» и выбираем файл метаданных в формате «xml», который мы скачали ранее при настройке доверительных отношений в субаккаунте SCP. Детали, касающиеся конфигурации SAML 2.0, будут автоматически заполнены после загрузки файла. Нажимаем «Save» — теперь конфигурация SAML 2.0 создана и сохранена для этого приложения.



Возвращаемся назад к точке приложения под названием ABC_PetroCorp_IDP в тенанте, нажимаем на «Home URL» и вводим URL типа «https://pollutionmonitoringui-<имя_субаккаунта>.dispatcher.<хост_региона>».

Этот URL можно найти в описании HTML5-приложения, на которое подписан клиент (субаккаунт «ABC PetroCorp»). Для этого переходим в субаккаунт клиента во вкладку «Applications» -> «Subscriptions» и выбираем подписанное HTML5-приложение.



Во вкладке «Overview» будет нужный нам URL.



Затем возвращаемся к точке приложения в SCI-тенанте, обозначаем URL-приложения в «Home URL» и нажимаем «Save».



Теперь перейдем во вкладку «Applications & Resources» -> «Tenant Settings» в консоли администрирования сервиса Identity Authentication. На странице настроек тенанта выбираем «SAML 2.0 Configuration».



В открывшемся окне нажимаем «Download Metadata File», чтобы скачать файл формата «xml», содержащий конфигурации SCI-тенанта. Он будет использован в дальнейшем для настройки доверительных отношений с субаккаунтом клиента в SCP.

Возвращаемся обратно в субаккаунт «ABC PetroCorp» и переходим в меню «Security» -> «Trust», в открывшемся окне выбираем вкладку «Application Identity Provider». Нажимаем на «Add Trusted Identity Provider», чтобы добавить детали о SCI-тенанте.



Во вкладке «General» нажимаем «Browse» и выбираем файл метаданных в формате «xml», скачанный из консоли администрирования сервиса Identity Authentication. Детали конфигурации автоматически заполняются после загрузки файла. Убираем галочку у поля «Only for IDP-Initiated SSO» и нажимаем «Save».



Теперь доверительные отношения между субаккаунтом клиента «ABC PetroCorp» и его SCI-тенантом успешно установлены. Те же настройки можно применить для субаккаунтов других клиентов (например, для клиента «XYZ EnergyCorp»).

Шаг 2: Импорт пользователей в SCI-тенант и обновление (добавление) необходимых атрибутов

Эмили необходимо обеспечить регистрацию пользователей приложения в корпоративном IDP компании ABC PetroCorp.

В идеале корпоративный IDP (в нашем случае SCI-тенант) уже включал бы в себя список всех пользователей в компании. Для наглядности мы импортируем некоторых пользователей в SCI-тенант, после этого они получат соответствующие разрешения для доступа в приложение.
Демо-пользователи для приложения хранятся в файле формата «csv» на github — в Github.

Скачаем файл «CSV» для «ABC PetroCorp» из GitHub. В файле формата «csv» обозначены два пользователя:

  • ABCPlantSupervisor: Этот пользователь будет руководителем конкретного завода компании «ABC PetroCorp» и сможет просматривать данные только о своем заводе;
  • ABCAreaManager: Этот пользователь будет руководителем целой области, которая может включать в себя несколько заводов «ABC PetroCorp». Он сможет просматривать данные о всех заводах в своей области.



«CSV»-файл для «ABC PetroCorp» содержит вымышленные email-адреса пользователей. Их нужно заменить на реальные, так как потом на них придут письма для активации аккаунтов. Например, если ваша реальная почта «john.smith@sap.com», то необходимо заменить обозначение <> на «john.smith», а <<insert_your_company>> на «sap».



Перейдем в консоль администрирования сервиса Identity Authentication и выберем вкладку «Users &Authorizations» -> «Import Users». Выбираем созданную ранее точку приложения «ABC_PetroCorp_IDP» и нажимаем «Browse», после чего выбираем файл «ABCPetroCorp.csv», описывающий наших демо-пользователей — и нажимаем кнопку «Import».



Пользователи должны активировать свой аккаунт. Чтобы получить e-mail со ссылкой для активации, необходимо нажать «Send» в окне «Send E-Mails».

Перед тем, как активировать пользователя, нужно поменять некоторые конфигурации.
Перейдем во вкладку «Users &Authorizations» -> «User Management». В списки пользователей появились два пользователя: «Area Manager» и «Plant Supervisor». Им автоматически присвоены идентификаторы: P000011 и P000010. Эти идентификаторы можно использовать в качестве логинов для входа в тенант (и в приложение, когда будут произведены все необходимые настройки).



Перейдем к пользователю P000011 или «Area Manager» и добавим имя, которое можно будет также использовать и в качестве логина для входа. Для этого нажимаем на значок редактирования в поле «Personal Information» и заполняем «Login Name» (в нашем случае это Johan).



После чего нажимаем «Save».

Теперь проделаем тоже самое с пользователем P000010 или «Plant Supervisor», но назовем его Smith.



У пользователя «Plant Supervisor» должна быть возможность просмотра информации только о своем заводе, то в секции с информацией о компании необходимо обозначить идентификатор компании (как этот идентификатор будет использоваться, будет объяснено в Шаге 4).

Для этого перейдем к разделу «Company Information» и введем идентификатор завода, а именно «101», в поле «Company».

Теперь информация о наших пользователях изменена. Для их активации переходим в указанные в «csv» файле почтовые ящики и переходим по ссылке для активации, либо нажимаем «Click here to activate your account».



Итак, мы успешно импортировали пользователей в SCI-тенант, обновили информацию о них и активировали их.

Шаг 3: Назначение ролей пользователям на уровне приложения в SAP Cloud Platform

Мультитенантное приложение «Pollution Monitoring», созданное Робертом из компании «ITeLO Consulting», предоставляет две предопределенные роли «PlantSupervisor» и «AreaManager», которые контролируют авторизацию пользователей в приложении и определяют, что видит конечный пользователь.

  • Роль «PlantSupervisor»: пользователи, которым назначена эта роль, смогут просматривать данные только того завода, который обозначен в сведениях о пользователе (Company Information) в SCI-тенанте.
  • Роль «AreaManager»: пользователи, которым назначена эта роль, смогут просматривать данные всех заводов в своей области.

Давайте посмотрим, как разделение по ролям достигается на уровне кода проекта.

Перейдем к файлу «web.xml», расположенном по пути «/pollutionmonitoring
/src/main/webapp/WEB-INF/web.xml» в папке проекта.

Откроем файл и убедимся, что две вышеупомянутые роли заданы в приложении.



Теперь перейдем к файлу «PollutionDataService.java», расположенному по пути «/pollutionmonitoring/src/main/java/com/sap/hana/cloud/samples/pollutionmonitoring/api/PollutionDataService.java» проекта и откроем его.

В этом файле обозначен метод «getCompanyPollutionData()». Он позволяет проверить, является ли пользователь администратором (менеджером). Если да, то в приложении отображаются данные по всем заводам, если же нет – данные фильтруются по идентификатору завода (plant_id). Также в приложении будет отображаться информация только по тем заводам, идентификаторы которых соответствуют обозначенным в информации о пользователе.



Для большей ясности можно обратиться к методу «isUserAdmin()», который позволяет определить по роли, является ли тот или иной пользователь администратором (менеджером) или нет.



Аналогичный алгоритм применяется для извлечения данных о заводе из локальных систем.



Теперь Эмили как сотруднику компании «ABC PetroCorp» нужно выделить менеджеров области и руководителей заводов, назначив им соответствующие роли («ABCPlantSupervisor» и «ABCAreaManager») в приложении в SCP.

Перейдем в субаккаунт клиента «ABC PetroCorp» и выберем Java-приложение «pollutionmonitoring», предоставленное провайдером «ITeLO Consulting» (оно расположено во вкладке «Applications» -> «Subscriptions»).



Далее переходим во вкладку «Roles» (на уровне приложения).

В открывшемся окне появится список ролей, обозначенных в приложении. Выбираем роль «PlantSupervisor» и нажимаем «Assign». В появившемся окне вводим идентификатор пользователя, обозначенного в SCI-тенанте как «ABCPlantSupervisor». В нашем случае идентификатором такого пользователя будет P000010.

Затем выбираем роль «AreaManager» и нажимаем «Assign». В появившемся окне вводим идентификатор пользователя, обозначенного в SCI-тенанте как «ABCAreaManager» (в нашем случае идентификатором такого пользователя будет P000011).



Итак, мы успешно сопоставили роли приложения с соответствующими пользователями «ABC PetroCorp» из SCI-тенанта.

Те же настройки можно применить в субаккаунте другого клиента (например, «XYZ EnergyCorp»).

Шаг 4: Настройка атрибутов в SCI-тенанте и панели управления SCP для их передачи в приложение

Роберт из «ITeLO Consulting» запрограммировал мультитенантное приложение таким образом, что ему необходимо передать идентификатор завода пользователя «PlantSupervisor», чтобы данные о заводе могли быть отфильтрованы в приложении для этого конкретного идентификатора завода.
В предыдущих шагах мы добавили идентификатор завода пользователю «PlantSupervisor» в SCI-тенанте в поле «Company Information», который теперь нам нужно передать в мультитенантное приложение. Далее он может использоваться в приложении для отображения данных, относящийся к конкретному заводу. Пользователь «AreaManager» по сути является администратором, который может просматривать данные со всех заводов.

Давайте посмотрим, как это организовано на уровне кода приложения.

Откроем файл «PollutionDataService.java», расположенный по пути «/pollutionmonitoring/src/main/java/com/sap/hana/cloud/samples/pollutionmonitoring/api/PollutionDataService.java» в проекте.

В данном файле описан метод «getPlantId()». Этот метод описывает получение имени пользователя и проверку атрибута «PLANT_ID», который используется для фильтрации данных об уровне загрязнения и данных завода.



Мы можем передавать атрибуты пользователя из SCI-тенанта в приложение через «SAML Assertion Attributes». Это необходимо, чтобы атрибут пользователя из SCI-тенанта, содержащий информацию о компании, был считан SCP во время входа пользователя в систему. Нужно, чтобы так называемый «Assertion Attribute» (атрибут утверждения), определенный для пользователя, был передан в приложение мониторинга загрязнения.

Для этого сначала создаём «Assertion Attribute» в SCI-тенанте, затем — обозначаем атрибут утверждения в основном атрибуте («Principal Attribute») в субаккаунте «ABC PetroCorp», который может быть прочитан кодом приложения, как показано выше.

Перейдем в консоль администрирования сервиса Identity Authentication и выберем вкладку «Applications & Resources» -> «Applications». Выбираем нужное нам приложение (ABC_PetroCorp_IDP) и во вкладке «Trust» нажимаем на «Assertion Attributes».



Появится список уже существующих атрибутов, нам нужно в него ещё один. Для этого нажимаем на кнопку «Add» и выбираем атрибут «Company».

Затем в значение атрибута добавляем «plant_id» (чувствителен к регистру) и нажимаем «Save».



Теперь перейдем к субаккаунту «ABC PetroCorp» в SCP и перейдем во вкладку «Security» -> «Trust». В окне «Trust Management» переходим на вкладку «Application Identity Provider» и выбираем привязанный к субаккаунту IdP.



В открывшемся окне переходим на вкладку «Attributes» и нажимаем «Add Assertion-Based Attribute». В поле «Assertion Attribute» вводим значение «plant_id» (как в SCI-тенанте), а в поле «Principal Attribute» вводим «PLANT_ID» (это значение будет передано в приложение как код завода) — и нажимаем «Save».

Итак, мы успешно настроили атрибуты в SCI-тенанте и в панели управления SCP для их передачи в приложение.

Шаг 5: Проверка настроек
Теперь Эмили может проверить, правильно ли определены настройки SCI-тенанта (IdP) для субаккаунта «ABC PetroCorp» в SCP и для приложения, которое предоставляет провайдером.

Для этого перейдем в субаккаунт «ABC PetroCorp» и обратимся к HTML5-приложению «pollutionmonitoringui» (оно расположено во вкладке «Applications» -> «Subscriptions»).



Скопируем ссылку на приложение. Откроем новую вкладку в браузере в режиме инкогнито и вставим ссылку на HTML5-приложение. Появится окно для входа в приложение, где будет отображаться название, обозначенное в SCI-тенанте.

Если всё настроено верно, то у вас должна появиться возможность входа в приложение под пользователями «AreaManager» и «PlantSupervisor», обозначенными в SCI-тенанте.

В нашем случае менеджером области является пользователь Johan (P000011), а начальником завода – Smith (P000010). В приложение под этими пользователями можно войти, используя в качестве логина либо имя пользователя, либо его идентификатор.

Примечание: при входе в приложение на этом этапе никакие данные не будут отображены. Это нормально, так как настройка еще не завершена и локальная система не подключена.


Итак, мы настроили связь провайдера идентификаций (IDP) с нашим приложением для мониторинга загрязнения в SCP. Мы также импортировали пользователей и назначили им правильные роли для доступа к приложению, обеспечили передачу корректной информации о заводе в приложение.
SAP
78,13
Лидер рынка корпоративных приложений
Поделиться публикацией

Комментарии 0

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое