OpenConnect с Apigility для ответа с помощью JWT

Как реализовать OpenConnect с Apigility, чтобы получить ответ типа JWT?

Проблема в том, что довольно просто добавить только OAuth2, следуя Apigility документация (или Вот этот, что действительно здорово), но когда дело доходит до того, чтобы получить этот JWT, как в примере ниже, не так просто найти документацию.

{
  "id": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
  "jti": "394a71988caa6cc30601e43f5b6569d52cd7f6df",
  "iss": "issuer_id",
  "aud": "client_id",
  "sub": "user_id",
  "exp": 1483711650,
  "iat": 1483708050,
  "token_type": "bearer",
  "scope": "onescope twoscope"
}

Итак, это скорее вопросы и ответы, так как я нигде не нашел и мне потребовалось почти 2 недели, чтобы собрать всю информацию самому, подумал, что это будет полезно кому-то еще.

Обратите внимание, что JWT состоит из 3 частей:

HEADER.PAYLOAD.SIGNATURE

Первые 2 идут в Base64, в котором вы можете просто использовать, последний - это ключ, сгенерированный для проверки. (подробнее см. это).

Решение будет ниже.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
327
1

Ответы 1

Если вы хотите добавить OpenConnect к поддерживаемому встроенному Apigility OAuth2, чтобы получить ответ JWT, то вам следует сделать следующее:

Сначала добавьте эти строки в /config/autoload/global.php

    'zf-oauth2' => [
        'allow_implicit'  => true,
        'access_lifetime' => 28800,
        'enforce_state'   => true,
        'options' => [
            'use_jwt_access_tokens'             => true,
            'store_encrypted_token_string'      => true,
            'use_openid_connect'                => true,
            'issuer'                            => 'issueroftoken.com',
            'id_lifetime'                       => 28800,
            'www_realm'                         => 'Service',
            'token_param_name'                  => 'access_token',
            'token_bearer_header_name'          => 'Bearer',
            'require_exact_redirect_uri'        => true,
            'allow_credentials_in_request_body' => true,
            'allow_public_clients'              => true,
            'always_issue_new_refresh_token'    => true,
            'unset_refresh_token_after_use'     => true,
        ],
    ],

Здесь важны строки use_jwt_access_tokens и use_openid_connect, которые должны быть установлены в значение true, и issuer, которые необходимо заполнить (я добавил адрес своего веб-сайта). Остальные можно удалить, если вы не хотите менять их значения по умолчанию.

Затем вам нужно создать эту таблицу (нашел эту информацию здесь):

CREATE TABLE oauth_public_keys (
  client_id            VARCHAR(80),
  public_key           VARCHAR(2000),
  private_key          VARCHAR(2000),
  encryption_algorithm VARCHAR(100) DEFAULT 'RS256'
)

Эта таблица будет использоваться для хранения одного ключа для каждого клиента, который вы должны сгенерировать, выполнив команду (нашел этот здесь):

# private key
$ openssl genrsa -out privkey.pem 2048

# public key
$ openssl rsa -in privkey.pem -pubout -out pubkey.pem

Затем вы должны взять содержимое этих файлов и заполнить public_key и private_key вместе с client_id.

Мои токены доступа генерировались на oauth_access_tokens, потому что я использую неявное предоставление типа (нет client_secret на oauth_clients и флаг allow_implicit на global.php), поэтому мне нужно было увеличить поле access_token, вам может потребоваться проверить, сколько символов в поле ( s) вы используете:

ALTER TABLE `oauth_access_tokens` CHANGE `access_token` `access_token` VARCHAR(2000) NOT NULL;

Так и должно быть! Теперь вы должны получить JWT в качестве ответа от Apigility!

Надеюсь это поможет.

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