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"}

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

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

HEADER.PAYLOAD.SIGNATURE

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

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

0

Решение

Если вы хотите добавить 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!

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]