Если вы хотите добавить OpenConnect к поддерживаемой встроенной OAuth2 Apigility, чтобы вы получили 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
, вам может понадобиться проверить, сколько символов используются в поле (ах), которое вы используетеиметь:
ALTER TABLE `oauth_access_tokens` CHANGE `access_token` `access_token` VARCHAR(2000) NOT NULL;
Так и должно быть!Теперь вы должны получить JWT в ответ от Apigility!
Надеюсь, это поможет.