Skip to content
This repository was archived by the owner on Aug 7, 2023. It is now read-only.

Commit 3f5aaea

Browse files
feat: add token prefix setting.
1 parent de44516 commit 3f5aaea

File tree

8 files changed

+32
-11
lines changed

8 files changed

+32
-11
lines changed

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ security:
6161
origin_token_headers: [authorization] #Required at least once of `origin_token_headers`, `origin_token_query_params` or `base64_headers`. Use this option when your Istio JWTRule CRD using `forwardOriginalToken`.
6262
origin_token_query_params: [token] #Use this option when your Istio JWTRule CRD using `forwardOriginalToken` and your JWT token in query param.
6363
base64_headers: [x-istio-jwt-payload] # Use this option when your Istio JWTRule CRD using `outputPayloadToHeader`.
64+
prefix: "Bearer " #Token prefix of origin token passthrough by default blank ("") if not set.
6465
```
6566
6667
In case your application have multi issuers:
@@ -73,6 +74,7 @@ In case your application have multi issuers:
7374
rules:
7475
- issuer: issuer_1
7576
origin_token_headers: [authorization]
77+
prefix: "Bearer "
7678
- issuer: issuer_2
7779
user_identifier_claim: aud
7880
base64_headers: [x-istio-jwt-payload]
@@ -92,7 +94,7 @@ origin_token=$(echo "header.$base64_payload.signature");
9294

9395
#You can test authenticate origin token with curl:
9496

95-
curl -H "Authorization: $origin_token" http://localhost/
97+
curl -H "Authorization: Bearer $origin_token" http://localhost/
9698

9799
#Or authenticate base64 payload header:
98100

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"minimum-stability": "stable",
1616
"require": {
1717
"php": ">=8.0",
18-
"php-istio/jwt-payload-extractor": "^1.0",
18+
"php-istio/jwt-payload-extractor": "^v1.1.1",
1919
"symfony/psr7-pack": "^1.0",
2020
"symfony/security-bundle": "^5.3"
2121
},

src/DependencyInjection/Security/AuthenticatorFactory.php

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,9 @@ public function addConfiguration(NodeDefinition $builder)
9595
->cannotBeEmpty()
9696
->end()
9797
->end()
98+
->scalarNode('prefix')
99+
->defaultNull()
100+
->end()
98101
->end()
99102
->end()
100103
->end()
@@ -119,7 +122,8 @@ private function createUserIdentifierClaimMappings(
119122
sprintf('%s.origin_token_headers.%s', $extractorIdPrefix, $key),
120123
'istio.jwt_authentication.payload_extractor.origin_token.header',
121124
$rule['issuer'],
122-
$rule['origin_token_headers']
125+
$rule['origin_token_headers'],
126+
$rule['prefix']
123127
);
124128
}
125129

@@ -129,7 +133,8 @@ private function createUserIdentifierClaimMappings(
129133
sprintf('%s.origin_token_query_params.%s', $extractorIdPrefix, $key),
130134
'istio.jwt_authentication.payload_extractor.origin_token.query_param',
131135
$rule['issuer'],
132-
$rule['origin_token_query_params']
136+
$rule['origin_token_query_params'],
137+
$rule['prefix']
133138
);
134139
}
135140

@@ -163,7 +168,8 @@ private function createPayloadExtractor(
163168
string $id,
164169
string $fromAbstractId,
165170
string $issuer,
166-
array $items
171+
array $items,
172+
?string $prefix = null
167173
): Reference {
168174
$definition = new ChildDefinition('istio.jwt_authentication.payload_extractor.composite');
169175
$container->setDefinition($id, $definition);
@@ -176,6 +182,11 @@ private function createPayloadExtractor(
176182
$subDefinition = new ChildDefinition($fromAbstractId);
177183
$subDefinition->replaceArgument(0, $issuer);
178184
$subDefinition->replaceArgument(1, $item);
185+
186+
if (null !== $prefix) {
187+
$subDefinition->replaceArgument(2, $prefix);
188+
}
189+
179190
$container->setDefinition($subId, $subDefinition);
180191
}
181192

src/Resources/config/payload_extractor.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,14 @@
2626
->factory([ExtractorFactory::class, 'fromOriginTokenHeader'])
2727
->arg(0, abstract_arg('issuer'))
2828
->arg(1, abstract_arg('header name'))
29+
->arg(2, '') // token prefix
2930

3031
->set('istio.jwt_authentication.payload_extractor.origin_token.query_param', OriginTokenExtractor::class)
3132
->abstract()
3233
->factory([ExtractorFactory::class, 'fromOriginTokenQueryParam'])
3334
->arg(0, abstract_arg('issuer'))
3435
->arg(1, abstract_arg('param name'))
36+
->arg(2, '') // token prefix
3537

3638
->set('istio.jwt_authentication.payload_extractor.base64_header', Base64HeaderExtractor::class)
3739
->abstract()

tests/Fixtures/TokenTrait.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ private function getOriginToken(
1818
mixed $userIdentifier = 'valid'
1919
): string {
2020
return sprintf(
21-
'header.%s.signature',
21+
'Bearer header.%s.signature',
2222
$this->getBase64Payload($issuer, $userIdentifierClaim, $userIdentifier)
2323
);
2424
}

tests/TestKernel.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ function (ContainerBuilder $container) {
9191
'issuer' => 'issuer_2',
9292
'user_identifier_claim' => 'id_2',
9393
'origin_token_headers' => ['authorization'],
94+
'prefix' => 'Bearer ',
9495
],
9596
],
9697
],

tests/Unit/Authenticator/AuthenticatorTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -223,11 +223,11 @@ private function getUserIdentifierClaimMappings(): array
223223
return [
224224
new UserIdentifierClaimMapping(
225225
'id_1',
226-
ExtractorFactory::fromOriginTokenHeader('issuer_1', 'authorization')
226+
ExtractorFactory::fromOriginTokenHeader('issuer_1', 'authorization', 'Bearer ')
227227
),
228228
new UserIdentifierClaimMapping(
229229
'id_2',
230-
ExtractorFactory::fromOriginTokenQueryParam('issuer_2', 'token')
230+
ExtractorFactory::fromOriginTokenQueryParam('issuer_2', 'token', '')
231231
),
232232
new UserIdentifierClaimMapping(
233233
'id_3',

tests/Unit/DepdendencyInjection/Security/AuthenticatorFactoryTest.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ public function testCreateAuthenticator()
6868
{
6969
$config = [
7070
'rules' => [
71-
['issuer' => 'test', 'origin_token_headers' => ['authorization'], 'user_identifier_claim' => 'sub'],
72-
['issuer' => 'test2', 'origin_token_query_params' => ['token'], 'user_identifier_claim' => 'sub'],
71+
['issuer' => 'test', 'origin_token_headers' => ['authorization'], 'user_identifier_claim' => 'sub', 'prefix' => 'test'],
72+
['issuer' => 'test2', 'origin_token_query_params' => ['token'], 'user_identifier_claim' => 'sub', 'prefix' => null],
7373
],
7474
];
7575

@@ -86,7 +86,7 @@ public function testCreateAuthenticator()
8686
public function testThrowExceptionWhenCreateAuthenticatorWithNoneExtractor()
8787
{
8888
$this->expectException(InvalidConfigurationException::class);
89-
$this->executeCreate(['rules' => ['issuer' => 'test']]);
89+
$this->executeCreate(['rules' => ['issuer' => 'test', 'prefix' => null]]);
9090
}
9191

9292
private function executeCreate(array $config)
@@ -114,6 +114,7 @@ public function validConfigurations(): array
114114
'origin_token_headers' => [],
115115
'origin_token_query_params' => [],
116116
'base64_headers' => [],
117+
'prefix' => null,
117118
],
118119
],
119120
],
@@ -124,6 +125,7 @@ public function validConfigurations(): array
124125
[
125126
'issuer' => 'example',
126127
'user_identifier_claim' => 'id',
128+
'prefix' => 'Bearer ',
127129
'origin_token_headers' => ['authorization'],
128130
'origin_token_query_params' => ['token'],
129131
'base64_headers' => ['x-istio-jwt-payload'],
@@ -135,6 +137,7 @@ public function validConfigurations(): array
135137
[
136138
'issuer' => 'example',
137139
'user_identifier_claim' => 'id',
140+
'prefix' => 'Bearer ',
138141
'origin_token_headers' => ['authorization'],
139142
'origin_token_query_params' => ['token'],
140143
'base64_headers' => ['x-istio-jwt-payload'],
@@ -148,6 +151,7 @@ public function validConfigurations(): array
148151
[
149152
'issuer' => 'example',
150153
'user_identifier_claim' => 'id',
154+
'prefix' => null,
151155
'origin_token_header' => ['authorization'],
152156
'origin_token_query_param' => ['token'],
153157
'base64_header' => ['x-istio-jwt-payload'],
@@ -159,6 +163,7 @@ public function validConfigurations(): array
159163
[
160164
'issuer' => 'example',
161165
'user_identifier_claim' => 'id',
166+
'prefix' => null,
162167
'origin_token_headers' => ['authorization'],
163168
'origin_token_query_params' => ['token'],
164169
'base64_headers' => ['x-istio-jwt-payload'],

0 commit comments

Comments
 (0)