#xpages #lotus-notes #lotus-domino #xpages-extlib
#xpages #lotus-notes #lotus-domino #xpages-extlib
Вопрос:
Я создал базу данных пользовательского REST-сервиса Java ExtLib XPage (CustomServiceBean) на основе этого решения:https://setza-projects.atlassian.net/wiki/spaces/RS/pages/363593730/IBM Domino
Я изменил его, чтобы использовать класс NotesCalendar для создания, обновления и удаления событий и резервирования ресурсов (так что фактически все обрабатывается календарем, я использую необработанные документы только для чтения $ Rooms в names.nsf и $ Reservations в базе данных reservations). Пока все работает нормально, для открытия календаря используется текущий сеанс. Однако у меня есть некоторые опасения относительно разрешений.
Чего я хочу (и в чем нуждаюсь):
- Возможность создавать события календаря и резервирования в качестве КОНКРЕТНЫХ пользователей, мне не нужен только один «основной» пользователь, который будет создавать все. Я хочу, чтобы каждый пользователь IBM Lotus мог входить в систему со своими учетными данными и создавать или обновлять события своего календаря.
Эта база данных с XPage будет развернута на серверах нашего клиента, поэтому я не хочу требовать какой-либо специальной настройки для каждого пользователя, чтобы иметь возможность доступа к моей службе REST. Я настроил новую локальную установку Lotus Server и создал новое приложение, используя мою базу данных XPage в качестве шаблона, и я не смог получить доступ к API ни с учетной записью администратора, ни с другими учетными записями:
HTTP JVM: CLFAD0229E: произошло исключение безопасности для запроса на обслуживание: /db.nsf/services.xsp/api — HTTP-код: 403. Для получения более подробной информации, пожалуйста, обратитесь error-log-0.xml
Как только я добавил свою учетную запись администратора в раздел Конфигурация сервера -> Безопасность -> Подписать или запустить неограниченные методы и операции, она снова начала работать. Не только для учетной записи администратора, но и для других учетных записей, которые были только что созданы с использованием интернет-пароля и которым не были назначены какие-либо конкретные роли или разрешения. Я даже не подписывал базу данных.
Итак, мой вопрос в том, достаточно ли этого для того, чтобы заставить его работать на производственном сервере клиента? Для меня это не имеет смысла, но это работало на моем локальном сервере, поэтому я не уверен, я новичок в IBM Lotus и я просто выполняю интеграцию REST service.
Если нет, то как я мог бы это сделать, чтобы мне действительно не нужно было подвергать конечного клиента (владельца сервера Lotus) хлопотам по настройке каждого пользователя, сохраняя при этом возможность доступа к API от имени любого пользователя Lotus (предоставляя имя пользователя и пароль)? Я могу либо войти в систему как каждый независимый пользователь, либо выполнить некоторое олицетворение с «основной» привилегированной учетной записью (создавать записи в чужом календаре под его именем), хотя я думаю, что в Java нет способа сделать это, потому что .getCalendar — это метод класса Session, я пытался использовать CreateSession (), но у меня не получилось.
Ответ №1:
Каждое приложение notes должно быть подписано администратором с идентификатором, известным среде клиентов. Идентификатор, который используется для подписи базы данных, должен иметь соответствующие права, через вкладку безопасность в документе сервера. Если приложение подписано неправильно, приложение не будет запущено. Как только приложение подписано, оно запускается в сеансе авторизованных пользователей с правами пользователей.
Комментарии:
1. Таким образом, это означает, что если я подпишу его с соответствующим пользователем, другие (обычные) пользователи также смогут запустить приложение? Вот как это сейчас работает у меня, я просто не уверен, будет ли это то же самое на серверах наших клиентов
2. Идентификатор пользователя, который подписал приложение, должен быть в списке в документе сервера «Безопасность > Ограничения программируемости > Подписывать агентов или XPages для запуска от имени вызывающего». Это делается для ограничения того, кому разрешено запускать код на серверах (на основе подписи). Если приложение запущено, каждый пользователь из списка ACL может получить доступ к приложению.