Политика OAuthV2

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

Что

OAuthV2 — это многогранная политика для выполнения операций типа предоставления OAuth 2.0. Это основная политика, используемая для настройки конечных точек OAuth 2.0 в Apigee Edge.

Совет: Если вы хотите узнать больше об OAuth в Apigee Edge, посетите домашнюю страницу OAuth . Он предоставляет ссылки на ресурсы, образцы, видео и многое другое. См. пример расширенного OAuth на GitHub, чтобы наглядно продемонстрировать, как эта политика используется в работающем приложении.

Образцы

Верифициакцесстокен

Верифициакцесстокен

Эта конфигурация политики OAuthV2 (с операцией VerifyAccessToken) проверяет действительность токена доступа, отправленного в Apigee Edge. Когда эта операция политики запускается, Edge ищет в запросе действительный токен доступа. Если токен доступа действителен, запрос может быть продолжен. Если оно недействительно, вся обработка останавливается, и в ответе возвращается ошибка.

<OAuthV2 async="false" continueOnError="false" enabled="true" name="OAuth-v20-2">
    <DisplayName>OAuth v2.0 2</DisplayName>
    <Operation>VerifyAccessToken</Operation>
    <AccessTokenPrefix>Bearer</AccessTokenPrefix> <!-- Optional, default is Bearer -->
</OAuthV2>

Примечание. Поддерживаются только токены носителя OAuth 2.0. Токены кода аутентификации сообщения (MAC) не поддерживаются.

Например:

$ curl -H "Authorization: Bearer ylSkZIjbdWybfsUQe9BqP0LH5Z" http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282

По умолчанию Edge принимает токены доступа в заголовке Authorization с префиксом Bearer . Вы можете изменить это значение по умолчанию с помощью элемента <AccessToken> .

Генерировать токен доступа

Генерация токенов доступа

Примеры запроса токенов доступа для каждого из поддерживаемых типов грантов см. в разделе Запрос токенов доступа и кодов авторизации . В теме приведены примеры таких операций:

Генерироватькод авторизации

Создать код авторизации

Примеры запроса кодов авторизации см. в разделе Запрос кода авторизации .

Обновить токен доступа

Обновить токен доступа

Примеры, показывающие, как запросить токены доступа с помощью токена обновления, см. в разделе Обновление токена доступа .

Токен потока ответа

Создайте токен доступа в потоке ответов.

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

Сначала давайте посмотрим на пример политики:

<OAuthV2 enabled="true" continueOnError="false" async="false" name="generateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <AppEndUser>Doe</AppEndUser>
    <UserName>jdoe</UserName>
    <PassWord>jdoe</PassWord>
    <GrantType>grant_type</GrantType>
    <ClientId>a_valid_client_id</ClientId>
    <SupportedGrantTypes>
        <GrantType>password</GrantType>
    </SupportedGrantTypes>
</OAuthV2>

Если вы поместите эту политику в поток ответов, она завершится с ошибкой 401 UnAuthorized, даже если в политике указаны правильные параметры входа. Чтобы решить эту проблему, вам необходимо установить заголовок запроса авторизации.

Заголовок авторизации должен содержать базовую схему доступа с кодом client_id:client_secret в кодировке Base64.

Вы можете добавить этот заголовок с политикой JavaScript, расположенной непосредственно перед политикой OAuthV2, вот так. Переменные «local_clientid» и «local_secret» должны быть предварительно установлены и доступны в потоке:

var client_id = context.getVariable("local_clientid");
var client_secret = context.getVariable("local_secret");
context.setVariable("request.header.Authorization","Basic "+CryptoJS.enc.Base64.stringify(CryptoJS.enc.Latin1
                                      .parse(client_id + ':' + client_secret)));

См. также « Кодирование учетных данных базовой аутентификации ».

Ссылка на элемент

Справочник по политике описывает элементы и атрибуты политики OAuthV2.

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

<OAuthV2 name="GenerateAccessToken">
  <!-- This policy generates an OAuth 2.0 access token using the client_credentials grant type -->
  <Operation>GenerateAccessToken</Operation>
  <!-- This is in millseconds, so expire in an hour -->
  <ExpiresIn>3600000</ExpiresIn>
  <SupportedGrantTypes>
    <GrantType>client_credentials</GrantType>
  </SupportedGrantTypes>
  <GrantType>request.queryparam.grant_type</GrantType>
  <GenerateResponse/>
</OAuthV2>

Атрибуты <OAuthV2>

<OAuthV2 async="false" continueOnError="false" enabled="true" name="MyOAuthPolicy">

В следующей таблице описаны атрибуты, общие для всех родительских элементов политики:

Атрибут Описание По умолчанию Присутствие
name

Внутреннее имя политики. Значение атрибута name может содержать буквы, цифры, пробелы, дефисы, подчеркивания и точки. Это значение не может превышать 255 символов.

При необходимости используйте элемент <DisplayName> , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.

Н/Д Необходимый
continueOnError

Установите значение false , чтобы возвращать ошибку в случае сбоя политики. Это ожидаемое поведение для большинства политик.

Установите значение true , чтобы выполнение потока продолжалось даже после сбоя политики.

ЛОЖЬ Необязательный
enabled

Установите значение true , чтобы обеспечить соблюдение политики.

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

истинный Необязательный
async

Этот атрибут устарел.

ЛОЖЬ Устарело

Элемент <DisplayName>

Используйте в дополнение к атрибуту name , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.

<DisplayName>Policy Display Name</DisplayName>
По умолчанию

Н/Д

Если вы опустите этот элемент, будет использовано значение атрибута name политики.

Присутствие Необязательный
Тип Нить

Элемент <AccessToken>

<AccessToken>request.header.access_token</AccessToken>

По умолчанию VerifyAccessToken ожидает, что токен доступа будет отправлен в заголовке Authorization . Вы можете изменить это значение по умолчанию, используя этот элемент. Например, request.queryparam.access_token указывает, что токен доступа должен присутствовать как параметр запроса с именем access_token .

Пример, где указан <AccessToken>request.header.access_token</AccessToken> :

curl https://myorg-myenv.apigee.net/oauth2/validate -H "access_token:Rft3dqrs56Blirls56a"
Пример, где указан <AccessToken>request.queryparam.access_token</AccessToken> :

curl "https://myorg-myenv.apigee.net/oauth2/validate?access_token:Rft3dqrs56Blirls56a"

По умолчанию:

Н/Д

Присутствие:

Необязательный

Тип: Нить
Используется с операциями:
  • Верифициакцесстокен

Элемент <AccessTokenPrefix>

<AccessTokenPrefix>Bearer</AccessTokenPrefix>

По умолчанию VerifyAccessToken ожидает, что токен доступа будет отправлен в заголовке авторизации в качестве токена носителя. Например:

-H "Authorization: Bearer Rft3dqrs56Blirls56a"

В настоящее время Bearer является единственным поддерживаемым префиксом.

По умолчанию:

Носитель

Присутствие:

Необязательный

Тип: Нить
Допустимые значения:

Носитель

Используется с операциями:
  • Верифициакцесстокен

Элемент <AppEndUser>

<AppEndUser>request.queryparam.app_enduser</AppEndUser>

В тех случаях, когда идентификатор конечного пользователя приложения необходимо отправить на сервер авторизации, этот элемент позволяет указать, где Edge должен искать идентификатор конечного пользователя. Например, его можно отправить как параметр запроса или в HTTP-заголовке.

Например, request.queryparam.app_enduser указывает, что AppEndUser должен присутствовать в качестве параметра запроса, как, например, ?app_enduser=ntesla@theramin.com . Например, чтобы потребовать AppEndUser в заголовке HTTP, установите для этого значения значение request.header.app_enduser .

Предоставление этого параметра позволяет включить идентификатор конечного пользователя приложения в токен доступа. Эта функция полезна, если вы хотите иметь возможность получать или отзывать токены доступа OAuth 2.0 по идентификатору конечного пользователя. Дополнительные сведения см. в разделе Включение получения и отзыва токенов доступа OAuth 2.0 по идентификатору конечного пользователя, идентификатору приложения или по тому и другому .

По умолчанию:

Н/Д

Присутствие:

Необязательный

Тип: Нить
Допустимые значения:

Любая переменная потока, доступная политике во время выполнения.

Используется с типами грантов:
  • код_авторизации
  • скрытый
  • пароль
  • client_credentials

<Атрибуты/Атрибут>

<Attributes>
    <Attribute name="attr_name1" ref="flow.variable" display="true|false">value1</Attribute>
    <Attribute name="attr_name2" ref="flow.variable" display="true|false">value2</Attribute>
</Attributes>

Используйте этот элемент для добавления пользовательских атрибутов к токену доступа или коду авторизации. Например, вы можете встроить идентификатор пользователя или идентификатор сеанса в токен доступа, который можно будет извлечь и проверить во время выполнения.

Этот элемент позволяет указать значение в переменной потока или в строке литерала. Если вы указываете и переменную, и строку, используется значение, указанное в переменной потока. Если переменную невозможно разрешить, строка используется по умолчанию.

Дополнительную информацию об использовании этого элемента см. в разделе Настройка токенов и кодов авторизации .

Отображение или скрытие пользовательских атрибутов в ответе

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

По умолчанию в ответе появляются пользовательские атрибуты. Если вы хотите их скрыть, вы можете установить для параметра display значение false . Например:

<Attributes>
    <Attribute name="employee_id" ref="employee.id" display="false"/>
    <Attribute name="employee_name" ref="employee.name" display="false"/>
</Attributes>

Значение атрибута display не сохраняется. Допустим, вы создаете токен доступа с настраиваемыми атрибутами, которые хотите скрыть в сгенерированном ответе. Установка display=false достигает этой цели. Однако если новый токен доступа будет создан позже с использованием токена обновления, исходные пользовательские атрибуты токена доступа будут отображаться в ответе токена обновления. Это связано с тем, что Edge не помнит, что атрибут display изначально был установлен в false в политике создания токена доступа — пользовательский атрибут является просто частью метаданных токена доступа.

Вы увидите такое же поведение, если добавите настраиваемые атрибуты в код авторизации — когда с использованием этого кода генерируется токен доступа, эти настраиваемые атрибуты будут отображаться в ответе на токен доступа. Опять же, это может быть не то поведение, которое вы хотите.

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

  • Явно сбросьте настраиваемые атрибуты в политике токена обновления и установите для них значение false. В этом случае вам может потребоваться получить исходные пользовательские значения из исходного токена доступа с помощью политики GetOAuthV2Info.
  • Используйте политику постобработки JavaScript, чтобы вручную извлечь любые пользовательские атрибуты, которые вы не хотите видеть в ответе.

См. также Настройка токенов и кодов авторизации .

По умолчанию:

N/A

Присутствие:

Необязательный

Допустимые значения:
  • name - Имя атрибута
  • ref — значение атрибута. Может исходить из переменной потока.
  • display – (необязательно) позволяет указать, будут ли в ответе появляться пользовательские атрибуты. Если true , в ответе появляются пользовательские атрибуты (если GenerateResponse также включен). Если false , пользовательские атрибуты не включаются в ответ. Значение по умолчанию — true . См. Отображение или скрытие пользовательских атрибутов в ответе .
Используется с типами грантов:
  • код_авторизации
  • скрытый
  • пароль
  • client_credentials
  • обновить_токен
  • Также может использоваться с операцией GenerateAuthorizationCode.

Элемент <ClientId>

<ClientId>request.formparam.client_id</ClientId>

В некоторых случаях клиентское приложение должно отправить идентификатор клиента на сервер авторизации. Этот элемент указывает, что Apigee должен искать идентификатор клиента в переменной потока request.formparam.client_id . Установка ClientId в любую другую переменную не поддерживается. См. также Запрос токенов доступа и кодов авторизации .

По умолчанию:

request.formparam.client_id (x-www-form-urlencoded и указанный в теле запроса)

Присутствие:

Необязательный

Тип: Нить
Допустимые значения: Переменная потока: request.formparam.client_id
Используется с типами грантов:
  • код_авторизации
  • пароль
  • скрытый
  • client_credentials

Также может использоваться с операцией GenerateAuthorizationCode.

Элемент <Код>

<Code>request.queryparam.code</Code>

В потоке типа предоставления авторизации клиент должен отправить код авторизации на сервер авторизации (Apigee Edge). Этот элемент позволяет указать, где Edge должен искать код авторизации. Например, его можно отправить как параметр запроса, HTTP-заголовок или параметр формы (по умолчанию).

Переменная request.queryparam.auth_code указывает, что код авторизации должен присутствовать в качестве параметра запроса, как, например, ?auth_code=AfGlvs9 . Например, чтобы запросить код авторизации в заголовке HTTP, установите для этого значения значение request.header.auth_code . См. также Запрос токенов доступа и кодов авторизации .

По умолчанию:

request.formparam.code (x-www-form-urlencoded и указанный в теле запроса)

Присутствие:

необязательный

Тип: Нить
Допустимые значения: Любая переменная потока, доступная политике во время выполнения.
Используется с типами грантов: код_авторизации

Элемент <ExpiresIn>

<ExpiresIn>10000</ExpiresIn> 

Обеспечивает срок действия токенов доступа и кодов авторизации в миллисекундах. (Для токенов обновления используйте <RefreshTokenExpiresIn> .) Значение времени истечения срока действия — это значение, созданное системой, плюс значение <ExpiresIn> . Если для <ExpiresIn> установлено значение -1 , срок действия токена или кода истекает в соответствии с максимальным сроком действия токена доступа OAuth . Если <ExpiresIn> не указан, система применяет значение по умолчанию, настроенное на уровне системы.

Время истечения срока действия также можно установить во время выполнения, используя либо жестко запрограммированное значение по умолчанию, либо путем ссылки на переменную потока. Например, вы можете сохранить значение срока действия токена в карте значений ключей, получить его, назначить переменной и ссылаться на него в политике. Например, kvm.oauth.expires_in .

При использовании Apigee Edge для публичного облака Edge сохраняет следующие объекты в кэше в течение как минимум 180 секунд после доступа к объектам.

  • Токены доступа OAuth. Это означает, что отозванный токен может быть успешным в течение трех минут, пока не истечет срок его кэша.
  • Объекты службы управления ключами (KMS) (приложения, разработчики, продукты API).
  • Пользовательские атрибуты токенов OAuth и объектов KMS.

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

<ExpiresIn ref="kvm.oauth.expires_in">
    3600000 <!--default value in milliseconds-->
</ExpiresIn>

Edge не поддерживает способ принудительного истечения срока действия токена после его создания. Если вам необходимо принудительно истечь срок действия токена (например, на основании какого-либо условия), возможное решение описано в этом сообщении сообщества Apigee .

По умолчанию токены доступа с истекшим сроком действия автоматически удаляются из системы Apigee Edge через 3 дня после истечения срока действия. См. также Очистка токенов доступа.

Частное облако: для установки Edge for Private Cloud значение по умолчанию задается свойством conf_keymanagement_oauth_auth_code_expiry_time_in_millis . Чтобы установить это свойство:

  1. Откройте файл message-processor.properties в редакторе. Если файл не существует, создайте его:
    vi /opt/apigee/customer/application/message-processor.properties
  2. Установите свойство по желанию:
    conf_keymanagement_oauth_auth_code_expiry_time_in_millis=3600000
  3. Убедитесь, что файл свойств принадлежит пользователю «apigee»:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  4. Перезапустите процессор сообщений.
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

По умолчанию:

Если не указано, система применяет значение по умолчанию, настроенное на уровне системы.

Присутствие:

Необязательный

Тип: Целое число
Допустимые значения:
Используется с типами грантов:
  • код_авторизации
  • скрытый
  • пароль
  • client_credentials
  • обновить_токен

Также используется с операцией GenerateAuthorizationCode.

Элемент <ExternalAccessToken>

<ExternalAccessToken>request.queryparam.external_access_token</ExternalAccessToken>

Сообщает Apigee Edge, где найти внешний токен доступа (токен доступа, не созданный Apigee Edge).

Переменная request.queryparam.external_access_token указывает, что токен внешнего доступа должен присутствовать в качестве параметра запроса, как, например, ?external_access_token=12345678 . Например, чтобы запросить внешний токен доступа в заголовке HTTP, установите для этого значения значение request.header.external_access_token . См. также Использование сторонних токенов OAuth .

Элемент <ExternalAuthorization>

<ExternalAuthorization>true</ExternalAuthorization>

Если этот элемент имеет значение false или отсутствует, Edge обычно проверяет client_id и client_secret в хранилище авторизации Apigee Edge. Используйте этот элемент, если хотите работать со сторонними токенами OAuth. Подробную информацию об использовании этого элемента см. в разделе Использование сторонних токенов OAuth .

По умолчанию:

ЛОЖЬ

Присутствие:

Необязательный

Тип: логическое значение
Допустимые значения: правда или ложь
Используется с типами грантов:
  • код_авторизации
  • пароль
  • client_credentials

Элемент <ExternalAuthorizationCode>

<ExternalAuthorizationCode>request.queryparam.external_auth_code</ExternalAuthorizationCode>

Сообщает Apigee Edge, где найти внешний код аутентификации (код аутентификации, не созданный Apigee Edge).

Переменная request.queryparam.external_auth_code указывает, что внешний код аутентификации должен присутствовать в качестве параметра запроса, как, например, ?external_auth_code=12345678 . Например, чтобы потребовать внешний код аутентификации в заголовке HTTP, установите для этого значения значение request.header.external_auth_code . См. также Использование сторонних токенов OAuth .

Элемент <ExternalRefreshToken>

<ExternalRefreshToken>request.queryparam.external_refresh_token</ExternalRefreshToken>

Сообщает Apigee Edge, где найти внешний токен обновления (токен обновления, не созданный Apigee Edge).

Переменная request.queryparam.external_refresh_token указывает, что внешний токен обновления должен присутствовать в качестве параметра запроса, как, например, ?external_refresh_token=12345678 . Например, чтобы потребовать внешний токен обновления в заголовке HTTP, установите для этого значения значение request.header.external_refresh_token . См. также Использование сторонних токенов OAuth .

Элемент <GenerateResponse>

<GenerateResponse enabled='true'/>

Если установлено значение true , политика генерирует и возвращает ответ. Например, для GenerateAccessToken ответ может быть таким:

{
  "issued_at" : "1467841035013",
  "scope" : "read",
  "application_name" : "e31b8d06-d538-4f6b-9fe3-8796c11dc930",
  "refresh_token_issued_at" : "1467841035013",
  "status" : "approved",
  "refresh_token_status" : "approved",
  "api_product_list" : "[Product1, nhl_product]",
  "expires_in" : "1799",
  "developer.email" : "edward@slalom.org",
  "token_type" : "BearerToken",
  "refresh_token" : "rVSmm3QaNa0xBVFbUISz1NZI15akvgLJ",
  "client_id" : "Adfsdvoc7KX5Gezz9le745UEql5dDmj",
  "access_token" : "AnoHsh2oZ6EFWF4h0KrA0gC5og3a",
  "organization_name" : "cerruti",
  "refresh_token_expires_in" : "0",
  "refresh_count" : "0"
}

Если false , ответ не отправляется. Вместо этого набор переменных потока заполняется значениями, связанными с функцией политики. Например, переменная потока с именем oauthv2authcode.OAuthV2-GenerateAuthorizationCode.code заполняется новым кодом аутентификации. Обратите внимание, что expires_in в ответе выражается в секундах.

По умолчанию:

ЛОЖЬ

Присутствие:

Необязательный

Тип: нить
Допустимые значения: правда или ложь
Используется с типами грантов:
  • скрытый
  • пароль
  • client_credentials
  • обновить_токен
  • Также может использоваться с операцией GenerateAuthorizationCode.

Элемент <GenerateErrorResponse>

<GenerateErrorResponse enabled='true'/>

Если установлено значение true , политика генерирует и возвращает ответ, если для атрибута ContinueOnError установлено значение true. Если false (по умолчанию), ответ не отправляется. Вместо этого набор переменных потока заполняется значениями, связанными с функцией политики.

По умолчанию:

ЛОЖЬ

Присутствие:

Необязательный

Тип: нить
Допустимые значения: правда или ложь
Используется с типами грантов:
  • скрытый
  • пароль
  • client_credentials
  • обновить_токен
  • Также может использоваться с операцией GenerateAuthorizationCode.

<Тип Гранта>

<GrantType>request.queryparam.grant_type</GrantType>

Сообщает политике, где найти параметр типа предоставления, передаваемый в запросе. Согласно спецификации OAuth 2.0, тип предоставления должен предоставляться вместе с запросами токенов доступа и кодов авторизации. Переменная может быть заголовком, параметром запроса или параметром формы (по умолчанию).

Например, request.queryparam.grant_type указывает, что пароль должен присутствовать в качестве параметра запроса, как, например, ?grant_type=password . Например, чтобы указать тип предоставления в заголовке HTTP, установите для этого значения значение request.header.grant_type . См. также Запрос токенов доступа и кодов авторизации .

По умолчанию:

request.formparam.grant_type (закодированный в формате x-www-form-urlen и указанный в теле запроса)

Присутствие:

Необязательный

Тип: нить
Допустимые значения: Переменная, как объяснялось выше.
Используется с типами грантов:
  • код_авторизации
  • пароль
  • скрытый
  • client_credentials
  • обновить_токен

Элемент <Операция>

<Operation>GenerateAuthorizationCode</Operation>

Операция OAuth 2.0, выполняемая политикой.

По умолчанию:

Если <Operation> не указан, Edge просматривает список <SupportedGrantTypes> . Только операции с этими типами грантов будут успешными. Другими словами, вы можете опустить <Operation> , если в списке <SupportedGrantTypes> указан <GrantType> . Если ни <Operation> , ни <SupportedGrantTypes> не указаны, типом предоставления по умолчанию является код_авторизации. То есть запросы типа предоставления авторизации_кода будут успешными, но все остальные потерпят неудачу.

Присутствие:

Необязательный

Тип: Нить
Допустимые значения:

Элемент <Пароль>

<PassWord>request.queryparam.password</PassWord>

Этот элемент используется только с типом предоставления пароля . При выборе типа предоставления пароля учетные данные пользователя (пароль и имя пользователя) должны быть доступны для политики OAuthV2. Элементы <PassWord> и <UserName> используются для указания переменных, в которых Edge может найти эти значения. Если эти элементы не указаны, политика ожидает найти значения (по умолчанию) в параметрах формы с именами username и password . Если значения не найдены, политика выдает ошибку. Вы можете использовать элементы <PassWord> и <UserName> для ссылки на любую переменную потока, содержащую учетные данные.

Например, вы можете передать пароль в запросе токена, используя параметр запроса, и установить элемент следующим образом: <PassWord>request.queryparam.password</PassWord> . Чтобы запросить пароль в заголовке HTTP, установите для этого значения значение request.header.password .

Политика OAuthV2 больше ничего не делает с этими значениями учетных данных; Edge просто проверяет их наличие. Разработчик API должен получить запрос значений и отправить их поставщику удостоверений до того, как будет выполнена политика генерации токенов.

См. также Запрос токенов доступа и кодов авторизации .

По умолчанию:

request.formparam.password (закодированный в формате x-www-form-urlen и указанный в теле запроса)

Присутствие:

Необязательный

Тип: Нить
Допустимые значения: Любая переменная потока, доступная политике во время выполнения.
Используется с типами грантов: пароль

Элемент <RedirectUri>

<RedirectUri>request.queryparam.redirect_uri</RedirectUri>

Указывает, где Edge должен искать параметр redirect_uri в запросе.

Об URI перенаправления

URI перенаправления используются с кодом авторизации и неявными типами предоставления. URI перенаправления сообщает серверу авторизации (Edge), куда отправить код авторизации (для типа предоставления кода аутентификации) или токен доступа (для неявного типа предоставления). Важно понимать, когда этот параметр обязателен, когда он необязателен и как он используется:

  • (обязательно) Если URL-адрес обратного вызова зарегистрирован в приложении разработчика, связанном с клиентскими ключами запроса, и если в запросе присутствует redirect_uri , то они должны точно совпадать. Если они не совпадают, возвращается ошибка. Информацию о регистрации приложений разработчика в Edge и указании URL-адреса обратного вызова см. в разделе Регистрация приложений и управление ключами API .

  • (необязательно) Если URL-адрес обратного вызова зарегистрирован, а redirect_uri отсутствует в запросе, Edge перенаправляет на зарегистрированный URL-адрес обратного вызова.
  • (обязательно) Если URL-адрес обратного вызова не зарегистрирован, необходимо указать redirect_uri . Обратите внимание, что в этом случае Edge примет ЛЮБОЙ URL-адрес. В этом случае может возникнуть проблема с безопасностью, поэтому его следует использовать только с доверенными клиентскими приложениями. Если клиентские приложения не вызывают доверия, рекомендуется всегда требовать регистрацию URL-адреса обратного вызова.

Вы можете отправить этот параметр в параметре запроса или в заголовке. Переменная request.queryparam.redirect_uri указывает, что RedirectUri должен присутствовать в качестве параметра запроса, как, например, ?redirect_uri=login.myapp.com . Например, чтобы потребовать RedirectUri в заголовке HTTP, установите для этого значения значение request.header.redirect_uri . См. также Запрос токенов доступа и кодов авторизации .

По умолчанию:

request.formparam.redirect_uri (закодированный в формате x-www-form-urlen и указанный в теле запроса)

Присутствие:

Необязательный

Тип: Нить
Допустимые значения: Любая переменная потока, доступная в политике во время выполнения.
Используется с типами грантов:
  • код_авторизации
  • скрытый

Также используется с операцией GenerateAuthorizationCode.

Элемент <RefreshToken>

<RefreshToken>request.queryparam.refreshtoken</RefreshToken>

При запросе токена доступа с использованием токена обновления вы должны указать токен обновления в запросе. Этот элемент позволяет указать, где Edge должен искать токен обновления. Например, его можно отправить как параметр запроса, HTTP-заголовок или параметр формы (по умолчанию).

Переменная request.queryparam.refreshtoken указывает, что токен обновления должен присутствовать в качестве параметра запроса, как, например, ?refresh_token=login.myapp.com . Например, чтобы требовать RefreshToken в заголовке HTTP, установите для этого значения значение request.header.refresh_token . См. также Запрос токенов доступа и кодов авторизации .

По умолчанию:

request.formparam.refresh_token (x-www-form-urlencoded и указанный в теле запроса)

Присутствие:

Необязательный

Тип: Нить
Допустимые значения: Любая переменная потока, доступная в политике во время выполнения.
Используется с типами грантов:
  • обновить_токен

Элемент <RefreshTokenExpiresIn>

<RefreshTokenExpiresIn>1000</RefreshTokenExpiresIn>

Устанавливает срок действия токенов обновления в миллисекундах. Значение времени истечения срока действия — это значение, созданное системой, плюс значение <RefreshTokenExpiresIn> . Если для <RefreshTokenExpiresIn> установлено значение -1 , срок действия токена обновления истекает в соответствии с максимальным сроком действия токена обновления OAuth . Если <RefreshTokenExpiresIn> не указан, система применяет значение по умолчанию, настроенное на уровне системы. Свяжитесь со службой поддержки Apigee Edge для получения дополнительной информации о настройках системы по умолчанию.

Время истечения срока действия также можно установить во время выполнения, используя либо жестко запрограммированное значение по умолчанию, либо путем ссылки на переменную потока. Например, вы можете сохранить значение срока действия токена в карте значений ключей, получить его, назначить переменной и ссылаться на него в политике. Например, kvm.oauth.expires_in .

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

<RefreshTokenExpiresIn ref="kvm.oauth.expires_in">
    3600000 <!--default value in milliseconds-->
</RefreshTokenExpiresIn>

Частное облако: для установки Edge для частного облака значение по умолчанию задается свойством conf_keymanagement_oauth_refresh_token_expiry_time_in_millis . Чтобы установить это свойство:

  1. Откройте файл message-processor.properties в редакторе. Если файл не существует, создайте его:
    vi /opt/apigee/customer/application/message-processor.properties
  2. Установите свойство по желанию:
    conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
  3. Убедитесь, что файл свойств принадлежит пользователю «apigee»:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  4. Перезапустите процессор сообщений.
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

По умолчанию:

63072000000 мс (2 года) (вступает в силу 5 августа 2024 г.)

Присутствие:

Необязательный

Тип: Целое число
Допустимые значения:
Используется с типами грантов:
  • код_авторизации
  • пароль
  • обновить_токен

Элемент <ResponseType>

<ResponseType>request.queryparam.response_type</ResponseType>

Этот элемент сообщает Edge, какой тип гранта запрашивает клиентское приложение. Он используется только с кодом авторизации и потоками неявного типа предоставления.

По умолчанию Edge ищет значение типа ответа в параметре запроса response_type . Если вы хотите переопределить это поведение по умолчанию, используйте элемент <ResponseType> для настройки переменной потока, содержащей значение типа ответа. Например, если вы установите для этого элемента значение request.header.response_type , Edge будет искать тип ответа, который будет передан в заголовке запроса. См. также Запрос токенов доступа и кодов авторизации .

По умолчанию:

request.formparam.response_type (x-www-form-urlencoded и указанный в теле запроса)

Присутствие:

Необязательный. Используйте этот элемент, если вы хотите переопределить поведение по умолчанию.

Тип: Нить
Допустимые значения: Либо code (для типа предоставления кода авторизации), либо token (для типа неявного предоставления).
Используется с типами грантов:
  • скрытый
  • Также используется с операцией GenerateAuthorizationCode.

Элемент <ReuseRefreshToken>

<ReuseRefreshToken>true</ReuseRefreshToken>

Если установлено значение true , существующий токен обновления используется повторно до истечения срока его действия. Если false , Apigee Edge выдает новый токен обновления при представлении действительного токена обновления.

По умолчанию:

false

Присутствие:

необязательный

Тип: логическое значение
Допустимые значения:

true или false

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

Элемент <Область>

<Scope>request.queryparam.scope</Scope>

Если этот элемент присутствует в одной из политик GenerateAccessToken или GenerateAuthorizationCode, он используется для указания того, каким областям следует предоставить токен или код. Эти значения обычно передаются в политику в запросе от клиентского приложения. Вы можете настроить элемент на прием переменной потока, что дает вам возможность выбирать, как области передаются в запросе. В следующем примере request.queryparam.scope указывает, что область должна присутствовать в качестве параметра запроса, как, например, ?scope=READ . Например, чтобы потребовать область действия в заголовке HTTP, установите для этого значения значение request.header.scope .

Если этот элемент присутствует в политике VerifyAccessToken, он используется для указания областей, которые должна применять политика. В политике этого типа значение должно быть «жестко закодированным» именем области — вы не можете использовать переменные. Например:

<Scope>A B</Scope>

См. также разделы «Работа с областями OAuth2» и «Запрос токенов доступа и кодов авторизации» .

По умолчанию:

Нет возможности

Присутствие:

Необязательный

Тип: Нить
Допустимые значения:

Если используется с политиками Generate*, переменная потока.

Если используется с VerifyAccessToken, список имен областей (строки), разделенный пробелами.

Используется с типами грантов:
  • код_авторизации
  • скрытый
  • пароль
  • client_credentials
  • Также может использоваться с операциями GenerateAuthorizationCode и VerifyAccessToken.

Элемент <Состояние>

<State>request.queryparam.state</State>

В тех случаях, когда клиентское приложение должно отправлять информацию о состоянии на сервер авторизации, этот элемент позволяет указать, где Edge должен искать значения состояния. Например, его можно отправить как параметр запроса или в HTTP-заголовке. Значение состояния обычно используется в качестве меры безопасности для предотвращения атак CSRF.

Например, request.queryparam.state указывает, что состояние должно присутствовать в качестве параметра запроса, как, например, ?state=HjoiuKJH32 . Например, чтобы запросить состояние в заголовке HTTP, установите для этого значения значение request.header.state . См. также См. также Запрос токенов доступа и кодов авторизации .

По умолчанию:

Нет состояния

Присутствие:

Необязательный

Тип: Нить
Допустимые значения: Любая переменная потока, доступная политике во время выполнения.
Используется с типами грантов:
  • Все
  • Также может использоваться с операцией GenerateAuthorizationCode.

Элемент <StoreToken>

 <StoreToken>true</StoreToken> 

Установите для этого элемента значение true если элемент <ExternalAuthorization> имеет true . Элемент <StoreToken> сообщает Apigee Edge о необходимости сохранить токен внешнего доступа. В противном случае он не будет сохранен.

По умолчанию:

ЛОЖЬ

Присутствие:

Необязательный

Тип: логическое значение
Допустимые значения: правда или ложь
Используется с типами грантов:
  • код_авторизации
  • пароль
  • client_credentials

Элемент <SupportedGrantTypes>/<GrantType>

<SupportedGrantTypes>
    <GrantType>authorization_code</GrantType>
    <GrantType>client_credentials</GrantType>
    <GrantType>implicit</GrantType>
    <GrantType>password</GrantType>
</SupportedGrantTypes>

Указывает типы грантов, поддерживаемые конечной точкой токена OAuth в Apigee Edge. Конечная точка может поддерживать несколько типов грантов (то есть одну конечную точку можно настроить для распространения токенов доступа для нескольких типов грантов). Дополнительные сведения о конечных точках см. в разделе Общие сведения о конечных точках OAuth . Тип гранта передается в запросах токена в grant_type .

Если не указаны поддерживаемые типы разрешений, то разрешенными типами разрешений являются authorization_code и implicit . См. также элемент <GrantType> (который является элементом более высокого уровня, который используется для указания того, где Apigee Edge должен искать параметр grant_type , передаваемый в клиентском запросе. Edge будет следить за тем, чтобы значение параметра grant_type соответствовало единице). поддерживаемых типов грантов).

По умолчанию:

авторизация _code и неявная

Присутствие:

Необходимый

Тип: Нить
Допустимые значения:
  • client_credentials
  • код_авторизации
  • пароль
  • скрытый

Элемент <Tokens>/<Token>

Используется с операциями ValidateToken и InvalidateToken. См. также Утверждение и отзыв токенов доступа . Элемент <Token> идентифицирует переменную потока, которая определяет источник отзываемого токена. Например, если ожидается, что разработчики будут отправлять токены доступа в качестве параметров запроса с именем access_token , используйте request.queryparam.access_token .

Элемент <имя_пользователя>

<UserName>request.queryparam.user_name</UserName>

Этот элемент используется только с типом предоставления пароля . При выборе типа предоставления пароля учетные данные пользователя (пароль и имя пользователя) должны быть доступны политике OAuthV2. Элементы <PassWord> и <UserName> используются для указания переменных, в которых Edge может найти эти значения. Если эти элементы не указаны, политика ожидает найти значения (по умолчанию) в параметрах формы с именами username и password . Если значения не найдены, политика выдает ошибку. Вы можете использовать элементы <PassWord> и <UserName> для ссылки на любую переменную потока, содержащую учетные данные.

Например, вы можете передать имя пользователя в параметре запроса и установить элемент <UserName> , как это: <UserName>request.queryparam.username</UserName> . Чтобы потребовать имя пользователя в заголовке HTTP, установите это значение для request.header.username . Header.username.

Политика OAuthv2 ничего не делает с этими ценностями учетных данных; Край просто проверяет, что они присутствуют. Разработчик API должен получить запрос на значения и отправить их поставщику идентификации до выполнения политики генерации токенов.

См. Также с просьбой запрашивать токены доступа и коды авторизации .

По умолчанию:

request.formparam.username (xwww-form-urlencode и указан в корпусе запроса)

Присутствие:

Необязательный

Тип: Нить
Допустимые значения: Любая настройка переменной.
Используется с типами грантов: пароль

Проверка токенов доступа

После того, как конечная точка токена установлена ​​для прокси -сервера API, соответствующая политика OAuthv2, которая указывает на операцию VerifyAccessToken , прикреплена к потоку, который выявляет защищенный ресурс.

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

<OAuthV2 name="VerifyOAuthAccessToken">
  <Operation>VerifyAccessToken</Operation>
</OAuthV2>

Политика прикреплена к ресурсу API, который будет защищен. Чтобы гарантировать, что все запросы на API проверены, прикрепите политику к предварительному предварительному предварительному обращению к запросу ProxyendPoint следующим образом:

<PreFlow>
  <Request>
    <Step><Name>VerifyOAuthAccessToken</Name></Step>
  </Request>
</PreFlow>

Следующие дополнительные элементы могут использоваться для переопределения настройки по умолчанию для операции VerifyAccessToken.

Имя Описание
Объем

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

<OAuthV2 name="ValidateOauthScopePolicy">
  <Operation>VerifyAccessToken</Operation>
  <Scope>READ WRITE</Scope>
</OAuthV2>
Accesstoken Переменная, где ожидается расположен токен доступа. Например, request.queryparam.accesstoken . По умолчанию, токен доступа, как ожидается, будет представлен приложением в заголовке HTTP авторизации, согласно спецификации OAuth 2.0 . Используйте этот параметр, если ожидается, что токен доступа будет представлен в нестандартном месте, например, параметр запроса или заголовок HTTP с именем, отличным от авторизации.

См. Также проверка токенов доступа и запрос токенов доступа и кодов авторизации .

Определение местоположений переменных запроса

Для каждого типа гранта политика делает предположения о местоположении или необходимой информации в сообщениях запроса. Эти предположения основаны на спецификации OAuth 2.0. Если ваши приложения должны отклониться от спецификации OAuth 2.0, вы можете указать ожидаемые местоположения для каждого параметра. Например, при обработке кода авторизации вы можете указать местоположение кода авторизации, идентификатор клиента, URI перенаправления и область применения. Они могут быть указаны как заголовки HTTP, параметры запроса или параметры формы.

Приведенный ниже пример демонстрирует, как вы можете указать местоположение необходимых параметров кода авторизации как заголовки HTTP:

  ...
  <GrantType>request.header.grant_type</GrantType>
  <Code>request.header.code</Code>
  <ClientId>request.header.client_id</ClientId>
  <RedirectUri>request.header.redirect_uri</RedirectUri>
  <Scope>request.header.scope</Scope>
  ...

Или, если необходимо, для поддержки базы приложений клиента, вы можете смешать и соответствовать заголовкам и параметрам запроса:

  ...
  <GrantType>request.header.grant_type</GrantType>
  <Code>request.header.code</Code>
  <ClientId>request.queryparam.client_id</ClientId>
  <RedirectUri>request.queryparam.redirect_uri</RedirectUri>
  <Scope>request.queryparam.scope</Scope>
  ...

Только одно местоположение может быть настроено на параметр.

Переменные потока

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

VerifyAccessToken Operation

Операция VerifyAccessToken выполняет, большое количество переменных потока заполняется в контексте выполнения прокси. Эти переменные дают вам свойства, связанные с токеном доступа, приложением для разработчиков, разработчиком и компанией. Вы можете использовать политику назначения или JavaScript, например, для чтения любой из этих переменных и использовать их по мере необходимости позже в потоке. Эти переменные также могут быть полезны для отладки.

Токен-специфические переменные

Переменные Описание
organization_name Название организации, в которой выполняется прокси.
developer.id Идентификатор разработчика, связанный с зарегистрированным клиентским приложением.
developer.app.name Имя разработчика, связанного с зарегистрированным клиентским приложением.
client_id Идентификатор клиента зарегистрированного клиентского приложения.
grant_type Тип гранта, связанный с запросом.
token_type Тип токена, связанный с запросом.
access_token Токен доступа, который проверяется.
accesstoken.{custom_attribute} Названный пользовательский атрибут в токене Access.
issued_at Дата, когда токен доступа был выпущен, выраженная во время эпохи UNIX в миллисекундах.
expires_in Время истечения для токена доступа. Выражены в секундах . Несмотря на то, что элемент ExpiresIn истекает истечение в миллисекундах, в переменных отклика токена и потока, значение выражается в секундах.
status Статус токена доступа (например, утвержден или отменен).
scope Область (если есть), связанная с токеном доступа.
apiproduct.<custom_attribute_name> Названный пользовательский атрибут продукта API, связанный с зарегистрированным клиентским приложением.
apiproduct.name Название продукта API, связанного с зарегистрированным клиентским приложением.
revoke_reason

(Только гибрид Apigee) указывает, почему токен доступа отменяется.

Значение может быть REVOKED_BY_APP , REVOKED_BY_ENDUSER , REVOKED_BY_APP_ENDUSER или TOKEN_REVOKED .

Приложение-специфические переменные

Эти переменные связаны с приложением разработчика, которое связано с токеном.

Переменные Описание
app.name
app.id
app.accessType
app.callbackUrl
app.status одобрено или отозвано
app.scopes
app.appFamily
app.apiproducts
app.appParentStatus
app.appType Например: разработчик
app.appParentId
app.created_by
app.created_at
app.last_modified_at
app.last_modified_by
app.{custom_attributes} Названный пользовательский атрибут зарегистрированного клиентского приложения.

Специфичные для разработчика переменные

Если App.Apptype является «компанией», то атрибуты компании заполняются, и если App.Apptype является «разработчиком», то атрибуты разработчика заполняются.

Переменные Описание
Специфичные для разработчика переменные
developer.id
developer.userName
developer.firstName
developer.lastName
developer.email
developer.status активный или неактивный
developer.apps
developer.created_by
developer.created_at
developer.last_modified_at
developer.last_modified_by
developer.{custom_attributes} Названный пользовательский атрибут разработчика.

Компания, переменные

Если App.Apptype является «компанией», то атрибуты компании заполняются, и если App.Apptype является «разработчиком», то атрибуты разработчика заполняются.

Переменные Описание
company.id
company.displayName
company.apps
company.appOwnerStatus
company.created_by
company.created_at
company.last_modified_at
company.last_modified_by
company.{custom_attributes} Названный пользовательский атрибут компании.

Работа об generateauthorizationCode

Эти переменные устанавливаются, когда операция GenerateAuthorizationCode успешно выполняется:

Prefix: oauthv2authcode.{policy_name}.{variable_name}

Пример: oauthv2authcode.GenerateCodePolicy.code

Переменная Описание
code Код авторизации сгенерирован, когда политика выполняется.
redirect_uri Перенаправление URI, связанное с зарегистрированным клиентским приложением.
scope Дополнительная область OAuth, передаваемая в запросе клиента.
client_id Идентификатор клиента прошел в запросе клиента.

GenerateAccessToken и OperreshaccessToken

Эти переменные устанавливаются, когда операции GenerateAccessToken и RefreshaccessToken успешно выполняются. Обратите внимание, что переменные токена обновления не применяются для потока грантов клиента.

Prefix: oauthv2accesstoken.{policy_name}.{variable_name}

Пример: oauthv2accesstoken.GenerateTokenPolicy.access_token

Имя переменной Описание
access_token Токен доступа, который был сгенерирован.
client_id Идентификатор клиента приложения разработчика связан с этим токеном.
expires_in Значение истечения срока для токена. Смотрите элемент <cerireSin> для деталей. Обратите внимание, что в ответ истекает истечение_IN в секундах .
scope Список доступных областей, настроенных для токена. См. Работа с OAuth2 Scopes .
status Либо approved , либо revoked .
token_type Установлен на BearerToken .
developer.email Адрес электронной почты зарегистрированного разработчика, который владеет приложением для разработчика, связанным с токеном.
organization_name Орг, где прокси выполняется.
api_product_list Список продуктов, связанных с соответствующим приложением разработчика токена.
refresh_count
refresh_token Токен обновления, который был сгенерирован. Обратите внимание, что токены обновления не генерируются для типа гранта клиента.
refresh_token_expires_in Срок службы токена обновления, в считанные секунды.
refresh_token_issued_at Это время-это строковое представление соответствующей 32-разрядной величины временной метки. Например, «Ср, 21 августа 2013 г. 19:16:47 UTC» соответствует значению временной метки 1377112607413.
refresh_token_status Либо approved , либо revoked .

GenerateAccesstokenimplicitgrant

Эти переменные устанавливаются, когда операция GenerateAccessTokenImplicit успешно выполняется для неявного потока типа гранта.

Prefix: oauthv2accesstoken.{policy_name}.{variable_name}

Пример: oauthv2accesstoken.RefreshTokenPolicy.access_token

Переменная Описание
oauthv2accesstoken.access_token Токен доступа сгенерирован при выполнении политики.
oauthv2accesstoken.{policy_name}.expires_in Значение истечения для токена, в считанные секунды. Смотрите элемент <cerireSin> для деталей.

Ссылка на ошибку

В этом разделе описаны коды ошибок и сообщения об ошибках, которые возвращаются, а также переменные ошибок, которые устанавливаются Edge, когда эта политика вызывает ошибку. Эту информацию важно знать, если вы разрабатываете правила обработки ошибок. Дополнительные сведения см. в разделах Что нужно знать об ошибках политики и Обработка ошибок .

Ошибки выполнения

Эти ошибки могут возникнуть при выполнении политики.

Код неисправности Статус HTTP Причина Выброшено операциями
steps.oauth.v2.access_token_expired 401 Срок действия токена доступа истек.

Верифициакцесстокен
Инвалидатетокен

steps.oauth.v2.access_token_not_approved 401 Токен доступа был отозван. VerifyAccessToken
steps.oauth.v2.apiresource_doesnot_exist 401 Запрошенный ресурс не существует ни одного из продуктов API, связанных с токеном доступа. VerifyAccessToken
steps.oauth.v2.FailedToResolveAccessToken 500 Политика ожидала найти токен доступа в переменной, указанной в элементе <AccessToken> , но эту переменную не удалось разрешить. Генерировать токен доступа
steps.oauth.v2.FailedToResolveAuthorizationCode 500 Политика ожидала найти код авторизации в переменной, указанной в элементе <Code> , но эту переменную не удалось разрешить. Генерироватькод авторизации
steps.oauth.v2.FailedToResolveClientId 500 Политика ожидала найти идентификатор клиента в переменной, указанной в элементе <ClientId> , но эту переменную не удалось разрешить. Генерировать токен доступа
Создать код авторизации
GenerateAccessTokenImplicitGrant
Обновить токен доступа
steps.oauth.v2.FailedToResolveRefreshToken 500 Политика ожидала найти токен обновления в переменной, указанной в элементе <RefreshToken> , но эту переменную не удалось разрешить. Обновить токен доступа
steps.oauth.v2.FailedToResolveToken 500 Политика ожидала найти токен в переменной, указанной в элементе <Tokens> , но эту переменную не удалось разрешить.

ValidateToken
Инвалидатетокен

steps.oauth.v2.InsufficientScope 403 Токен доступа, представленный в запросе, имеет область, не соответствующую области, указанной в политике проверки токена доступа. Дополнительные сведения об области см. в разделе Работа с областями действия OAuth2 . VerifyAccessToken
steps.oauth.v2.invalid_access_token 401 Токен доступа, отправленный от клиента, недействителен. VerifyAccessToken
steps.oauth.v2.invalid_client 401

Это имя ошибки возвращается, когда для свойства <GenerateResponse> политики установлено значение true , а идентификатор клиента, отправленный в запросе, недействителен. Убедитесь, что вы используете правильный клиентский ключ и секретные значения для приложения разработчика, связанного с вашим прокси-сервером. Обычно эти значения отправляются в виде заголовка базовой авторизации в кодировке Base64.

Примечание. Рекомендуется изменить существующие условия правила сбоя, чтобы перехватывать имена invalid_client и InvalidClientIdentifier . Дополнительную информацию и пример см. в примечаниях к выпуску 16.09.21 .

Генерировать токен доступа
Обновить токен доступа
steps.oauth.v2.invalid_request 400 Это имя ошибки используется для нескольких различных типов ошибок, обычно из-за отсутствия или неверных параметров, отправленных в запросе. Если для <GenerateResponse> установлено значение false , используйте переменные ошибки (описанные ниже) для получения подробной информации об ошибке, например имени и причины ошибки. Генерировать токен доступа
Генерироватькод авторизации
GenerateAccessTokenImplicitGrant
Обновить токен доступа
steps.oauth.v2.InvalidAccessToken 401 В заголовке авторизации нет обязательного слова «Носитель». Например: Authorization: Bearer your_access_token VerifyAccessToken
steps.oauth.v2.InvalidAPICallAsNo\
steps.oauth.v2.ApiProductMatchFound
401

Прокси-сервер API отсутствует в Продукте, связанном с токеном доступа.

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

Дополнительные сведения о причинах этой ошибки см. в этом сообщении сообщества Apigee.

VerifyAccessToken
steps.oauth.v2.InvalidClientIdentifier 500

Это имя ошибки возвращается, если для свойства <GenerateResponse> политики установлено значение false , а идентификатор клиента, отправленный в запросе, недействителен. Убедитесь, что вы используете правильный клиентский ключ и секретные значения для приложения разработчика, связанного с вашим прокси-сервером. Обычно эти значения отправляются в виде заголовка базовой авторизации в кодировке Base64.

Примечание. В этой ситуации эта ошибка раньше называлась invalid_client . Рекомендуется изменить существующие условия правила сбоя, чтобы перехватывать имена invalid_client и InvalidClientIdentifier . Дополнительную информацию и пример см. в примечаниях к выпуску 16.09.21 .

Генерировать токен доступа
Обновить токен доступа

steps.oauth.v2.InvalidParameter 500 В политике должен быть указан либо токен доступа, либо код авторизации, но не то и другое. Создать код авторизации
GenerateAccessTokenImplicitGrant
steps.oauth.v2.InvalidTokenType 500 Элемент <Tokens>/<Token> требует указания типа токена (например, refreshtoken ). Если клиент передает неправильный тип, выдается эта ошибка. ValidateToken
Инвалидатетокен
steps.oauth.v2.MissingParameter 500 Тип ответа — token , но типы грантов не указаны. Создать код авторизации
GenerateAccessTokenImplicitGrant
steps.oauth.v2.UnSupportedGrantType 500

Клиент указал тип предоставления, который не поддерживается политикой (не указан в элементе <SupportedGrantTypes>).

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

Генерировать токен доступа
Создать код авторизации
GenerateAccessTokenImplicitGrant
Обновить токен доступа

Ошибки развертывания

Эти ошибки могут возникнуть при развертывании прокси-сервера, содержащего эту политику.

Название ошибки Причина
InvalidValueForExpiresIn

Для элемента <ExpiresIn> допустимыми значениями являются положительные целые числа и -1 .

InvalidValueForRefreshTokenExpiresIn Для элемента <RefreshTokenExpiresIn> допустимыми значениями являются положительные целые числа и -1 .
InvalidGrantType В элементе <SupportedGrantTypes> указан недопустимый тип предоставления. Список допустимых типов см. в справочнике по политике.
ExpiresInNotApplicableForOperation Убедитесь, что операции, указанные в элементе <Operations>, поддерживают срок действия. Например, операция VerifyToken этого не делает.
RefreshTokenExpiresInNotApplicableForOperation Убедитесь, что операции, указанные в элементе <Operations>, поддерживают истечение срока действия токена обновления. Например, операция VerifyToken этого не делает.
GrantTypesNotApplicableForOperation Убедитесь, что типы грантов, указанные в <SupportedGrantTypes>, поддерживаются для указанной операции.
OperationRequired

Вы должны указать операцию в этой политике, используя элемент <Operation> .

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

InvalidOperation

Вы должны указать допустимую операцию в этой политике, используя элемент <Operation> .

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

TokenValueRequired Вы должны указать значение токена <Token> в элементе <Tokens> .

Переменные неисправности

Эти переменные устанавливаются, когда эта политика вызывает ошибку во время выполнения.

Переменные Где Пример
fault.name=" fault_name " fault_name — это имя ошибки, как указано в таблице ошибок времени выполнения выше. Имя неисправности — это последняя часть кода неисправности. fault.name = "invalid_request"
oauthV2. policy_name .failed policy_name — указанное пользователем имя политики, вызвавшей ошибку. oauthV2.GenerateAccesstoken.failed = true
oauthV2. policy_name .fault.name policy_name — указанное пользователем имя политики, вызвавшей ошибку. oauthV2.GenerateAccesstoken.fault.name = invalid_request

Примечание . Для операции VerifyAccessToken имя ошибки включает суффикс: keymanagement.service
Например: keymanagement.service.invalid_access_token

oauthV2. policy_name .fault.cause policy_name — указанное пользователем имя политики, вызвавшей ошибку. oauthV2.GenerateAccesstoken.cause = Required param : grant_type

Пример ответа об ошибке

Эти ответы отправляются обратно клиенту, если элемент <GenerateResponse> имеет значение true .

Если <GenerateResponse> имеет значение true , политика возвращает ошибки в этом формате для операций, генерирующих токены и коды. Полный список см. в разделе «Справочник по ответам на ошибки HTTP OAuth» .

{"ErrorCode" : "invalid_client", "Error" :"ClientId is Invalid"}

Если <GenerateResponse> имеет значение true , политика возвращает ошибки в этом формате для операций проверки и проверки. Полный список см. в разделе «Справочник по ответам на ошибки HTTP OAuth» .

{  
   {  
      "fault":{  
         "faultstring":"Invalid Access Token",
         "detail":{  
            "errorcode":"keymanagement.service.invalid_access_token"
         }
      }
   }

Пример правила неисправности

<FaultRule name=OAuthV2 Faults">
    <Step>
        <Name>AM-InvalidClientResponse</Name>
        <Condition>(fault.name = "invalid_client") OR (fault.name = "InvalidClientIdentifier")</Condition>
    </Step>
    <Step>
        <Name>AM-InvalidTokenResponse</Name>
        <Condition>(fault.name = "invalid_access_token")</Condition>
    </Step>
    <Condition>(oauthV2.failed = true) </Condition>
</FaultRule>

Политическая схема

Каждый тип политики определяется схемой XML ( .xsd ). Для справки, схемы политики доступны на GitHub.

Работа с конфигурацией OAuth по умолчанию

Каждая организация (даже бесплатная судебная организация) на Apigee Edge обеспечивается конечной точкой токена OAuth. Конечная точка предварительно настроена с политикой в ​​прокси API под названием OAuth . Вы можете начать использовать конечную точку токена, как только вы создадите учетную запись на Apigee Edge . Для получения подробной информации см. Понимание конечных точек OAuth .

Очищение токенов доступа

По умолчанию токены OAuth2 очищаются из системы Apigee Edge 3 дня (259200 секунд) после истечения срока как токена доступа, так и токена обновления (если она существует). В некоторых случаях вы можете изменить это по умолчанию. Например, вы можете сократить время чистки, чтобы сэкономить пространство диска, если генерируется большое количество токенов.

Если вы находитесь на грани частного облака , вы можете изменить это значение по умолчанию, установив свойства организации, как объяснено в этом разделе. (Трехдневная чистка истекших токенов применяется к Edge для частного облака версии 4.19.01, а затем. Для более ранних версий интервал чистки по умолчанию составляет 180 дней.)

Обновление настроек чистки для Edge Private Cloud 4.16.01 и более поздних версий

Примечание: только токены, сгенерированные после применения этих настроек; Настройки не применяются к токенам, которые были сгенерированы ранее.

Обновление настроек чистки для Edge Private Cloud 4.15.07

Примечание: только токены, сгенерированные после применения этих настроек; Настройки не применяются к токенам, которые были сгенерированы ранее.

Не совместимое с RFC поведение

Политика OAuthv2 возвращает реакцию токена, который содержит определенные не соответствующие RFC свойства. В следующей таблице показаны не соответствующие свойства, возвращаемые политикой OAuthv2 и соответствующими соответствующими свойствами.

Oauthv2 возвращает: Собственность, соответствующая RFC:
"token_type":"BearerToken" "token_type":"Bearer"
"expires_in":"3600" "expires_in":3600

(Соответствующее значение - это число, а не строка.)

Кроме того, ответ ошибки для истекшего токена обновления, когда grant_type = refresh_token :

{"ErrorCode" : "invalid_request", "Error" :"Refresh Token expired"}

Тем не менее, ответ RFC-совместимый:

{"error" : "invalid_grant", "error_description" :"refresh token expired"}

Связанные темы