Антишаблон: не устанавливает срок действия для токенов OAuth. Антишаблон: не устанавливает срок действия для токенов OAuth.

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

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

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

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

Этот антипаттерн связан с антипаттерном установки длительного срока действия для токенов OAuth .

Антипаттерн

Установка параметра "без срока действия" для токена обновления в политике OAuthv2 приводит к накоплению токенов OAuth и увеличению использования дискового пространства на узлах Cassandra.

В приведенном ниже примере политики OAuthV2 показано отсутствие конфигурации для <RefreshTokenExpiresIn> :

<OAuthV2 name="GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
    <!--<RefreshTokenExpiresIn> is missing -->
    <SupportedGrantTypes>
      <GrantType>password</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

В приведенном выше примере:

  • Срок действия токена доступа установлен на достаточно короткий срок — 30 минут.
  • Срок действия токена обновления не установлен.
  • Токен обновления сохраняется в хранилище данных (Cassandra) навсегда, что приводит к накоплению данных.
  • Токен обновления, выпущенный без срока действия, может использоваться неограниченно долго для генерации токенов доступа.
  • Если трафик к этому API составляет 10 запросов в секунду, он может генерировать до 864 000 токенов в день.

Влияние

  • Если токен обновления создан без указания срока действия, это влечет за собой два основных последствия:
    • Токен обновления можно использовать в любое время в будущем, возможно, в течение многих лет, для получения токена доступа. Это может иметь последствия для безопасности.
    • Строка в Cassandra, содержащая токен обновления, никогда не будет удалена. Это приведет к накоплению данных в Cassandra.
  • Если вы не используете токен обновления для получения нового токена доступа, а вместо этого создадите новый токен обновления и токен доступа, старый токен обновления останется в Cassandra. В результате токены обновления будут продолжать накапливаться в Cassandra, что еще больше увеличит объем занимаемого дискового пространства, приведет к увеличению нагрузки на систему и более интенсивной компакции, и в конечном итоге вызовет задержки чтения/записи в Cassandra.

Передовая практика

Установите подходящее короткое время истечения срока действия как для токенов обновления, так и для токенов доступа. См. рекомендации по настройке времени истечения срока действия токенов обновления и доступа. Обязательно укажите конфигурацию истечения срока действия для обоих токенов — доступа и обновления — в политике. Для получения дополнительной информации о настройке политики обратитесь к документации по политикам OAuthV2 .

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

В этом разделе описаны лучшие практики, разработанные специально для клиентов Edge for Private Cloud.

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

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

  1. На узле обработчика сообщений отредактируйте или создайте файл переопределения конфигурации $APIGEE_ROOT/customer/application/message-processor.properties . Убедитесь, что этот файл доступен для чтения пользователю apigee .
  2. Добавьте в файл следующую строку:
    conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
    Это установит время истечения срока действия токена обновления по умолчанию, если оно не указано в политике, равным 1 часу. Вы можете изменить это значение по умолчанию в соответствии с потребностями вашего бизнеса.
  3. Перезапустите службу обработки сообщений:
    apigee-service edge-message-processor restart
  4. Повторите описанные выше шаги на всех узлах обработки сообщений по очереди.

Рекомендации по использованию Cassandra

Попробуйте обновить Apigee до последней общедоступной версии. Apigee продолжает выпускать исправления и улучшения, которые постоянно совершенствуют и оптимизируют управление токенами в Apigee. В Apigee токены доступа и обновления хранятся в Cassandra в пространстве ключей «kms». Убедитесь, что стратегия сжатия этого пространства ключей установлена ​​на LeveledCompactionStrategy . Проверьте, отсутствуют ли следующие индексы:
  • kms.oauth_20_access_tokens.oauth_20_access_tokens_organization_name_idx #f0f0f0 and
  • kms.oauth_20_access_tokens.oauth_20_access_tokens_status_idx

Также можно уменьшить значение gc_grace_seconds в таблице kms.oauth_20_access_tokens со значения по умолчанию в 10 дней до меньшего значения (например, 3 дня), чтобы обеспечить более быстрое удаление из хранилища данных записей, созданных в результате удаления токенов.

Дополнительная информация