A JWEBuilderFactory is available as a service in your application container:
<?php
use Jose\Component\Encryption\JWEBuilderFactory;
$jweBuilderFactory = $container->get(JWEBuilderFactory::class);With this factory, you will be able to create the JWEBuilder you need:
$jweBuilder = $jweBuilderFactory->create(
['A256GCMKW'],
['A256CBC-HS256'],
['DEF'] // Compression methods
);Available compression methods are:
DEF: deflate (recommended)
GZ: gzip
ZLIB: zlib
You can now use the JWEBuilder as explained in the JWE Creation section.
There is also another way to create a JWEBuilder object: using the bundle configuration.
jose:
jwe:
builders:
builder1:
key_encryption_algorithms: ['A256GCMKW']
content_encryption_algorithms: ['A256CBC-HS256']
compression_methods: ['DEF']
is_public: trueWith the previous configuration, the bundle will create a public JWE Builder service named jose.jwe_builder.builder1 with selected encryption algorithms.
<?php
$jweBuilder = $container->get('jose.jwe_builder.builder1');You can add custom tags and attributes to the services you create.
jose:
jwe:
builders:
builder1:
key_encryption_algorithms: ['A256GCMKW']
content_encryption_algorithms: ['A256CBC-HS256']
compression_methods: ['DEF']
tags:
tag_name1: ~
tag_name2: {attribute1: 'foo'}A JWEDecrypterFactory is available as a service in your application container:
<?php
use Jose\Component\Encryption\JWEDecrypterFactory;
$jweDecrypterFactory = $container->get(JWEDecrypterFactory::class);With this factory, you will be able to create the JWEDecrypter you need:
$jweDecrypter = $jweDecrypterFactory->create(['HS256']);You can now use the JWEDecrypter as explained in the JWE Creation section.
Reminder: it is important to check the token headers. See the checker section of this documentation.
There is also another way to create a JWEDecrypter object: using the bundle configuration.
jose:
jwe:
decrypters:
decrypter1:
key_encryption_algorithms: ['A256GCMKW']
content_encryption_algorithms: ['A256CBC-HS256']
compression_methods: ['DEF']
is_public: trueWith the previous configuration, the bundle will create a public JWE Decrypter service named jose.jwe_decrypter.decrypter1 with selected encryption algorithms.
<?php
$jweDecrypter = $container->get('jose.jwe_decrypter.decrypter1');This feature was introduced in version 1.1.
You can add custom tags and attributes to the services you create.
jose:
jwe:
decrypters:
decrypter1:
key_encryption_algorithms: ['A256GCMKW']
content_encryption_algorithms: ['A256CBC-HS256']
compression_methods: ['DEF']
tags:
tag_name1: ~
tag_name2: {attribute1: 'foo'}The JWELoaderFactory is available as a public service. You can retrieve it using the container or inject it into your services. It will help you to create JWELoader objects on demand.
<?php
use Jose\Component\Encryption\JWELoaderFactory;
$jweLoaderFactory = $container->get(JWELoaderFactory::class);You can also create JWELoader objects as services using the configuration of the bundle.
jose:
jwe:
loaders:
jwe_loader1:
key_encryption_algorithms: ['A256GCMKW']
content_encryption_algorithms: ['A256CBC-HS256']
compression_methods: ['DEF']
header_checkers: ['alg', 'enc']
is_public: trueOr using the ConfigurationHelper.
<?php
use Jose\Bundle\JoseFramework\Helper\ConfigurationHelper;
...
ConfigurationHelper::addJWELoader($container, 'jwe_loader1', ['jwe_compact'], ['A256GCMKW'], ['A256CBC-HS256'], ['DEF'], ['alg', 'enc'], true);A JWESerializerManagerFactory is available as a service in your application container:
With this factory, you will be able to create the JWESerializerManager you need:
You can now use the JWESerializerManager as explained in the JWE Creation/Loading section.
Available JWE serialization modes are:
jwe_compact
jwe_json_general
jwe_json_flattened
There is also another way to create a JWESerializerManager object: using the bundle configuration.
With the previous configuration, the bundle will create a public JWE Serializer Manager service named jose.jwe_serializer.serializer1 with selected serialization modes.
You can add custom tags and attributes to the services you create.
<?php
use Jose\Component\Encryption\JWESerializerManagerFactory;
$jweSerializerManagerFactory = $container->get(JWESerializerManagerFactory::class);$jweSerializerManager = $jweSerializerManagerFactory->create(['jwe_compact']);jose:
jwe:
serializers:
serializer1:
serializers: ['jwe_compact']
is_public: true<?php
$jweSerializerManager = $container->get('jose.jwe_serializer.serializer1');jose:
jwe:
serializers:
serializer1:
serializers: ['jwe_compact']
tags:
tag_name1: ~
tag_name2: {attribute1: 'foo'}To use the encrypted tokens (JWE), you have to install the web-token/jwt-encryption component.
composer require web-token/jwt-encryptionWhen this component is installed, encryption algorithms are automatically handles by the Algorithm Manager Factory.
You can use symfony/serializer to serialize/unserialize your tokens:
// $serializer corresponds to the Symfony serializer
$serializer->serialize($data, 'jwe_compact');