Как использовать SAML с Edge Management API

Базовая аутентификация – один из способов аутентификации при вызове API управления Edge. Например, вы можете отправить следующий запрос cURL к Edge Management API, чтобы получить информацию о своей организации:

curl -u userName:pWord https://ms_IP_DNS:8080/v1/organizations/orgName

В этом примере для передачи учетных данных Basic Auth используется параметр -u команды cURL. Вы также можете передать токен OAuth2 в заголовке Bearer, чтобы выполнять вызовы API управления Edge. Пример:

curl -H "Authorization: Bearer access_token" https://ms_IP_DNS:8080/v1/organizations/orgName

После включения SAML можно отключить базовую аутентификацию. Если вы это сделаете, все скрипты (скрипты Maven, скрипты оболочки, apigeetool и т. д.), которые используют вызовы API управления Edge с поддержкой базовой аутентификации, перестанут работать. Вам необходимо обновить все вызовы API и скрипты, в которых используется базовая аутентификация, чтобы передавать токены доступа OAuth2 в заголовке Bearer.

Как получать и обновлять токены с помощью get_token

Утилита get_token обменивает ваши учетные данные базовой аутентификации и код доступа на токен доступа и токен обновления OAuth2. Утилита get_token принимает ваши учетные данные и выводит действительный токен доступа. Если токен можно обновить, он будет обновлен и выведен на экран. Если срок действия токена обновления истечет, пользователю будет предложено ввести учетные данные.

Утилита get_token сохраняет токены на диске, чтобы их можно было использовать при необходимости. Также в стандартный поток вывода будет выведен действительный токен доступа. Затем вы можете использовать его в Postman или встроить в переменную среды для использования в curl.

Ниже описано, как использовать get_token, чтобы получить токен доступа OAuth2 для вызовов Edge Management API:

  1. Скачайте пакет sso-cli:
    curl http://edge_sso_IP_DNS:9099/resources/scripts/sso-cli/ssocli-bundle.zip -o "ssocli-bundle.zip"

    где edge_sso_IP_DNS – это IP-адрес или имя DNS-сервера, на котором размещен модуль Edge SSO. Если вы настроили TLS в Edge SSO, используйте https и правильный номер порта TLS.

  2. Распакуйте набор ssocli-bundle.zip:
    unzip ssocli-bundle.zip
  3. Установите get_token в /usr/local/bin:
    > ./install Используйте параметр -b, чтобы указать другое местоположение: > ./install -b путь
  4. Задайте для переменной среды SSO_LOGIN_URL URL входа в следующем формате:
    export SSO_LOGIN_URL="http://edge_sso_IP_DNS:9099"

    где edge_sso_IP_DNS – IP-адрес или имя DNS компьютера, на котором размещен модуль Edge SSO. Если вы настроили TLS в Edge SSO, используйте https и правильный номер порта TLS.
  5. В браузере перейдите по следующему URL, чтобы получить одноразовый код доступа:
    http://edge_sso_IP_DNS:9099/passcode

    Если вы настроили TLS в Edge SSO, используйте https и правильный номер порта TLS.

    Примечание. Если вы не вошли в аккаунт через поставщика идентификационной информации, вам будет предложено это сделать.

    Этот URL возвращает одноразовый код доступа, который остается действительным, пока вы не обновите URL, чтобы получить новый код, или не используете код с get_token для создания токена доступа.
  6. Вызовите get_token, чтобы получить токен доступа OAuth2:
    > get_token -u emailAddress

    где emailAddress – адрес электронной почты пользователя Edge. Вам будет предложено ввести одноразовый код доступа, полученный на шаге 3:
    One Time Code ( Get one at https://edge_sso_IP.com/passcode )
    Enter the passcode if SAML is enabled or press ENTER:


    Введите код доступа. Утилита get_token получает токен доступа OAuth2, выводит его на экран и записывает его и токен обновления в файл ~/.sso-cli.

    Вы можете ввести код доступа в командной строке, используя команду get_token в следующем формате:
    > get_token -u emailAddress -p passcode
  7. Передайте токен доступа в вызов API управления Edge в качестве заголовка Bearer:
    > curl -H "Authorization: Bearer access_token" https://ms_IP:8080/v1/organizations/orgName

    После того как вы впервые получите новый токен доступа, вы сможете получать токен доступа и передавать его в вызов API одной командой, как показано ниже:
    > header=`get_token` && curl -H "Authorization: Bearer $header" https://ms_IP:8080/v1/o/orgName

    Если токен доступа истек, он автоматически обновляется, пока не истечет срок действия токена обновления.

После того как срок действия токена обновления истечет, функция get_token запросит новый код доступа. Чтобы создать новый токен доступа OAuth, вам нужно перейти по URL, указанному на шаге 3, и сгенерировать новый код доступа.

Как получать и обновлять токены с помощью API управления

В статье Использование OAuth2 для защиты API управления Apigee Edge приведены инструкции по получению и обновлению токенов с помощью API управления Edge. Вы также можете использовать вызовы Edge API для токенов, сгенерированных на основе утверждений SAML.

Единственное отличие вызовов API, описанных в статье Использование защиты OAuth2 с Apigee Edge Management API, заключается в том, что URL вызова должен ссылаться на название вашей зоны. Кроме того, при создании начального токена доступа необходимо указать код доступа, как показано на шаге 3 описанной выше процедуры.

Например, чтобы создать исходные токены доступа и обновления, используйте следующий вызов API:

curl -H "Content-Type: application/x-www-form-urlencoded;charset=utf-8" /
-H "accept: application/json;charset=utf-8" /
-H "Authorization: Basic ZWRnZWNsaTplZGdlY2xpc2VjcmV0" -X POST /
https://edge_sso_IP_DNS:9099/oauth/token -s /
-d 'grant_type=password&response_type=token&passcode=passcode'  

Для авторизации передайте зарезервированные учетные данные клиента OAuth2 в заголовке Authorization. При вызове на экран выводятся токены доступа и обновления.

Чтобы обновить токен доступа, используйте следующий вызов, включающий токен обновления:

curl -H "Content-Type:application/x-www-form-urlencoded;charset=utf-8" /
-H "Accept: application/json;charset=utf-8" /
-H "Authorization: Basic ZWRnZWNsaTplZGdlY2xpc2VjcmV0" -X POST /
https://edge_sso_IP_DNS:9099/oauth/token /
-d 'grant_type=refresh_token&refresh_token=refreshToken'