Сервис сейчас API, как комментировать как конкретного пользователя

Я работаю над проектом, который использует Service Now API (Rest). Для этого наш клиент зарегистрировал нас как пользователя, чтобы войти в систему и сделать все необходимые сервисные вызовы. В этом проекте есть интерфейс, в котором пользователи могут войти в систему после того, как у них есть учетная запись в Service Now. Кстати, имя пользователя, которое они вводят для входа, теперь, кстати, не имеет ничего общего со службой, но позже они связывают свою службу, теперь пользователи с ней. Они могут выполнять некоторые операции через этот интерфейс, где все они выполняются с использованием пользователя интеграции / не передают свои услуги пользователям сейчас самим, даже если им не нужно делиться своими паролями с нами. Но сейчас нужно отследить правильного пользователя, чтобы зарегистрироваться на сервисе, и у меня возникли проблемы с комментированием инцидента. Конечная точка для комментария следующая:

http: // имя хоста / api / now / таблица / инцидент /{sys_id}

где тело запроса - это объект json, такой же простой как:

{
"comments": "My comment is foo bar"
}

но когда этот комментарий зарегистрирован в службе "Сейчас", он находится под пользователем интеграции, а не тем, кто прокомментировал. Можно ли каким-то образом сохранить конкретного пользователя, учитывая, что у меня уже есть идентификатор пользователя на Сервисе, и теперь он готов сообщить его по запросу так, как должно быть. Я пытался читать документацию по сервису сейчас, но понятия не имел, как ее решить, хотя нашел что-то об олицетворении

1 ответ

Во-первых, вам нужен пользователь интеграции с достаточными правами. У нашего пользователя интеграции достаточно прав из коробки, но ваша история может быть другой. Быстрая проверка - попытаться выдать себя за другого пользователя с помощью меню.

  1. Войдите как пользователь интеграции в экземпляр ServiceNow.
  2. Перейдите на https://{instance}.service-now.com/nav_to.do.
  3. Щелкните имя пользователя в правом верхнем углу. Это выпадающий список.
  4. В меню должно быть как минимум три пункта: "Профиль", "Выдача себя за пользователя" и "Выход". Если в этом меню нет параметра "Выдать себя за пользователя", значит, пользователь интеграции не имеет некоторых разрешений. Если вы пропустили этот пункт меню, обратитесь к системному администратору, чтобы настроить соответствующие разрешения.

Затем вам нужно найти sys_id пользователя, которого вы хотите олицетворять. Например:

https: // {экземпляр}.service-now.com/api/now/table/sys_user?sysparm_query=user_name={username}&sysparm_fields=sys_id

Если у вас есть достаточные привилегии, вы можете вызвать конечную точку фоллинга с sys id пользователя, которого вы хотите олицетворять:

  • HTTP POST на https://{instance}.service-now.com/api/now/ui/impersonate/{user_sys_id} с телом "{}" и типом содержимого "application/json". Вам необходимо предоставить базовую аутентификацию HTTP для этого запроса в качестве пользователя интеграции.

Код ответа в случае успеха - 200. Тело ответа можно игнорировать. Интересным результатом этого ответа является набор файлов cookie для олицетворенного пользователя в заголовках ответа. Эти файлы cookie можно использовать для последующих вызовов REST API до истечения срока их действия. Используйте некоторый зависимый от клиента метод HTTP rest, чтобы захватить их и предоставить их для следующих вызовов.

Для HTTP-клиента Apache (Java) я создаю контекст http-клиента, используя:

    HttpClientContext context = HttpClientContext.create();
    context.setCookieStore(new BasicCookieStore());

Передавать контекст объекта в запрос олицетворения и последующие вызовы API, пока я не получу ответ 401, после чего я повторно запрашиваю файлы cookie. Настройка нового хранилища файлов cookie важна, так как в противном случае используется хранилище файлов cookie по умолчанию.

Обратите внимание на две вещи:

  • Этот API выглядит как внутренний, поэтому его можно изменить в любой момент. Если это произойдет, поищите, что делает пункт меню "Выдать впечатление пользователя", и повторите это сами.
  • Разрешения ServiceNow достаточно детализированы, поэтому у целевого пользователя могут отсутствовать разрешения для выполнения операции. В некоторых случаях, если нет разрешения на обновление поля, операция PATCH для объекта возвращает ответ 200, но поле не обновляется. Это приводит к неожиданному отказу при использовании олицетворения.

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

Я могу придумать два способа решить эту проблему.

  1. Попросите клиента войти в свою систему напрямую как пользователь.

  2. Реализуйте специальный API (Scripted REST API, доступный в Женеве или позже), который позволяет идентифицировать Инцидент и вводить комментарий, а затем скрипт подделывает комментарий от вашего имени, правильно приписывая авторство.

Первое решение может быть дорогим из-за возможных дополнительных затрат на лицензирование.

Второе решение потребует от готового клиента посвятить 2-3 часа времени разработки, в зависимости от программиста.

Другие вопросы по тегам