Использование OAuth2 для доступа к Edge API

Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee
X.info

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

Как работает OAuth2 (с API Apigee Edge)

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

Например, если вам нужно получить подробную информацию об организации в Edge, вы можете отправить запрос на URL-адрес, подобный следующему:

https://api.enterprise.apigee.com/v1/organizations/ahamilton-eval

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

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

К счастью, вы можете получить токен, отправив свои учетные данные в службу Edge OAuth2. Служба ответит токенами доступа и обновления.

Процесс OAuth2: Первоначальный запрос

На следующем изображении показан процесс аутентификации OAuth2 при первом доступе к Edge API:

Процесс аутентификации OAuth: Первый запрос
Рисунок 1: Схема аутентификации OAuth: Первый запрос

Как показано на рисунке 1 , при отправке первоначального запроса к Edge API:

  1. Вы запрашиваете токен доступа. Это можно сделать с помощью Edge API , acurl или get_token . Например:
    get_token
    Enter username:
    ahamilton@apigee.com
    Enter the password for user 'ahamilton@apigee.com'
    [hidden input]
    Enter the six-digit code if 'ahamilton@apigee.com' is MFA enabled or press ENTER:
    123456
  2. Сервис Edge OAuth2 отправляет токен доступа и выводит его в stdout ; например:
    Dy42bGciOiJSUzI1NiJ9.eyJqdGkiOiJhM2YwNjA5ZC1lZTIxLTQ1YjAtOGQyMi04MTQ0MTYxNjNhNTMiLCJz
    AJpdGUiLCJhcHByb3ZhbHMubWUiLCJvYXV0aC5hcHByb3ZhbHMiXSwiY2xpZW50X2lkIjoiZWRnZWNsaSIsIm
    NjbGkiLCJhenAiOiJlZGdlY2xpIiwiZ3JhbnRfdHlwZSI6InBhc3N3b3JkIiwidXNlcl9pZCI6IjJkMWU3NDI
    GzQyMC1kYzgxLTQzMDQtOTM4ZS1hOGNmNmVlODZhNzkiLCJzY29wZSI6WyJzY2ltLm1lIiwib3BlbmlkIiwic
    ENC05MzhlLWE4Y2Y2ZWU4NmE3OSIsIm9yaWdpbiI6InVzZXJncmlkIiwidXNlcl9uYW1lIjoiZGFuZ2VyNDI0
    RI6ImUyNTM2NWQyIiwiaWF0IjoxNTI4OTE2NDA5LCJleHAiOjE1Mjg5MTgyMDksImlzcyI6Imh0dHBzOi8vbG
    420iLCJlbWFpbCI6ImRhbmdlcjQyNDJAeWFob28uY29tIiwiYXV0aF90aW1lIjoxNTI4OTE2NDA5LCJhbCI6M
    2lLmNvbSIsInppZCI6InVhYSIsImF1ZCI6WyJlZGdlY2xpIiwic2NpbSIsIm9wZW5pZCIsInBhc3N3b3JkIiw

    Утилиты acurl и get_token автоматически сохраняют токены доступа и обновления в ~/.sso-cli (токен обновления не выводится в stdout ). Если вы используете службу Edge OAuth2 для получения токенов, вам необходимо сохранить их для последующего использования самостоятельно.

  3. Вы отправляете запрос к Edge API, используя токен доступа. acurl автоматически добавляет токен; например:
    acurl https://api.enterprise.apigee.com/v1/organizations/ahamilton-eval

    Если вы используете другой HTTP-клиент, обязательно добавьте токен доступа. Например:

    curl https://api.enterprise.apigee.com/v1/organizations/ahamilton-eval \
      -H "Authorization: Bearer ACCESS_TOKEN"
  4. API Edge выполняет ваш запрос и обычно возвращает ответ с данными.

Процесс OAuth2: Последующие запросы

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

Процесс аутентификации OAuth: Последующие запросы
Рисунок 2: Схема аутентификации OAuth: Последующие запросы

Как показано на рисунке 2 , если у вас уже есть токен доступа:

  1. Вы отправляете запрос к Edge API с токеном доступа. acurl автоматически добавляет токен. Если вы используете другие инструменты, вам потребуется добавить токен вручную.
  2. API Edge выполняет ваш запрос и обычно возвращает ответ с данными.

Процесс OAuth2: Когда истекает срок действия вашего токена доступа

Когда срок действия токена доступа истекает (через 12 часов), вы можете использовать токен обновления, чтобы получить новый токен доступа:

Процесс OAuth: обновление токена доступа.
Рисунок 3: Схема OAuth: Обновление токена доступа

Как показано на рисунке 3 , когда срок действия вашего токена доступа истекает:

  1. Вы отправляете запрос к Edge API, но срок действия вашего токена доступа истек.
  2. API Edge отклоняет ваш запрос как несанкционированный.
  3. Вы отправляете токен обновления в службу Edge OAuth2. Если вы используете acurl , это делается автоматически.
  4. Сервис Edge OAuth2 отправляет новый токен доступа.
  5. Вы отправляете запрос к Edge API, используя новый токен доступа.
  6. API Edge выполняет ваш запрос и обычно возвращает ответ с данными.

Получите токены

Для получения токена доступа, который можно отправить в Edge API, помимо таких утилит, как curl , можно использовать следующие утилиты Apigee:

  • Утилита get_token : обменивает ваши учетные данные Apigee на токены доступа и обновления, которые вы можете использовать для вызова Edge API.
  • Утилита acurl : Предоставляет удобную обертку над стандартной командой curl . Формирует HTTP-запросы к Edge API, получает токены доступа и обновления из get_token и передает токен доступа в Edge API.
  • Конечные точки для получения токенов в сервисе Edge OAuth2 : обменяйте свои учетные данные Apigee на токены доступа и обновления с помощью вызова API Edge.

Эти утилиты обменивают ваши учетные данные Apigee (адрес электронной почты и пароль) на токены со следующим сроком действия:

  • Срок действия токенов доступа истекает через 12 часов.
  • Срок действия токенов обновления составляет 30 дней.

В результате, после успешного выполнения вызова API с помощью acurl или get_token , вы можете продолжать использовать пару токенов в течение 30 дней. По истечении срока действия вам необходимо повторно ввести свои учетные данные и получить новые токены.

Получите доступ к Edge API с помощью OAuth2.

Для доступа к Edge API необходимо отправить запрос на конечную точку API, указав в нем токен доступа. Это можно сделать с помощью любого HTTP-клиента, включая утилиту командной строки, такую ​​как curl , браузерный интерфейс, например Postman, или утилиту Apigee, например acurl .

Доступ к Edge API с помощью acurl и curl описан в следующих разделах.

Используйте acurl

Для доступа к API Edge с помощью acurl ваш первоначальный запрос должен включать ваши учетные данные. Сервис Edge OAuth2 ответит токенами доступа и обновления. acurl сохранит токены локально.

При последующих запросах acurl использует сохраненные токены из ~/.sso-cli , поэтому вам не нужно будет снова вводить свои учетные данные до истечения срока действия токенов.

В следующем примере показан первоначальный запрос acurl , который получает подробные сведения об организации "ahamilton-eval":

acurl https://api.enterprise.apigee.com/v1/organizations/ahamilton-eval \
  -u ahamilton@apigee.com
Enter the password for user 'ahamilton@apigee.com'
[hidden input]
Enter the six-digit code (no spaces) if 'ahamilton@apigee.com' is MFA-enabled or press ENTER:
1a2b3c
{
  "createdAt" : 1491854501264,
  "createdBy" : "noreply_iops@apigee.com",
  "displayName" : "ahamilton",
  "environments" : [ "prod", "test" ],
  "lastModifiedAt" : 1491854501264,
  "lastModifiedBy" : "noreply_iops@apigee.com",
  "name" : "ahamilton",
  "properties" : {
    "property" : [ {
      "name" : "features.isSmbOrganization",
      "value" : "false"
    }, {
      "name" : "features.isCpsEnabled",
      "value" : "true"
    } ]
  },
  "type" : "trial"
}

acurl https://api.enterprise.apigee.com/v1/o/ahamilton-eval/apis/helloworld/revisions/1/policies

[ "SOAP-Message-Validation-1", "Spike-Arrest-1", "XML-to-JSON-1" ]

В дополнение к получению подробной информации об организации, этот пример также демонстрирует второй запрос, который получает список политик в рамках API-прокси "helloworld". Во втором запросе используется сокращение "o" для "organizations" в URL-адресе.

Обратите внимание, что acurl автоматически передает токен доступа во втором запросе. Вам не нужно передавать свои учетные данные пользователя после того, как acurl сохранит токены OAuth2. Он получает токен из ~/.sso-cli для последующих вызовов.

Для получения дополнительной информации см. раздел «Использование acurl для доступа к Edge API» .

Используйте curl

Для доступа к API Edge можно использовать curl . Для этого необходимо сначала получить токены доступа и обновления. Получить их можно с помощью таких утилит, как get_token или сервиса Edge OAuth2.

После успешного сохранения токена доступа передайте его в заголовок Authorization ваших вызовов к Edge API, как показано в следующем примере:

curl https://api.enterprise.apigee.com/v1/organizations/ahamilton-eval \
  -H "Authorization: Bearer ACCESS_TOKEN"

Токен доступа действителен в течение 12 часов после выдачи. После истечения срока действия токена доступа, токен обновления можно использовать в течение 30 дней для выдачи нового токена доступа без необходимости ввода учетных данных. Apigee рекомендует запрашивать новый токен доступа только после истечения срока действия токена обновления, а не вводить учетные данные и выполнять новый запрос при каждом вызове API.

Срок действия токена истекает

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

Способ обновления токена доступа зависит от используемого инструмента:

  • acurl : Никаких действий не требуется. acurl автоматически обновляет токен доступа, если вы отправляете запрос, содержащий устаревший токен.
  • get_token : Вызовите функцию get_token для обновления токена доступа.
  • Сервис Edge OAuth2 : Отправьте запрос, содержащий:
    • Токен обновления
    • Параметр формы grant_type установлен в значение "refresh_token".

OAuth2 для машинных пользователей

С помощью утилит acurl и get_token можно автоматизировать доступ к API Edge с использованием аутентификации OAuth2 для пользователей машин. В следующем примере показано, как использовать get_token для запроса токена доступа, а затем добавить значение токена к вызову curl :

  USER=me@example.com
  PASS=not-that-secret
  TOKEN=$(get_token -u $USER:$PASS -m '')
  curl -H "Authorization: Bearer $TOKEN" 'https://api.enterprise.apigee.com/v1/organizations/...'

В качестве альтернативы, вы можете объединить запрос токена и вызов curl , используя утилиту acurl . Например:

  USER=me@example.com
  PASS=not-that-secret
  acurl -u $USER:$PASS -m '' 'https://api.enterprise.apigee.com/v1/organizations/...'
  

В обоих примерах установка значения параметра -m в пустую строку предотвратит запрос на ввод кода многофакторной аутентификации у пользователя компьютера.