Skip to content

Commit 93fbb8a

Browse files
authored
Merge pull request quarkusio#47786 from mcruzdev/jwt-issues
Add support for disabling automatic key generation in JWT extension via new properties
2 parents 4c8f45d + 5637695 commit 93fbb8a

File tree

4 files changed

+78
-2
lines changed

4 files changed

+78
-2
lines changed

docs/src/main/asciidoc/security-jwt.adoc

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -876,12 +876,16 @@ You can disable automatic key generation by setting at least one of the followin
876876

877877
* `mp.jwt.verify.publickey.location`
878878
* `mp.jwt.verify.publickey`
879+
* `mp.jwt.decrypt.key.location`
880+
* `smallrye.jwt.encrypt.key.location`
879881
* `smallrye.jwt.sign.key.location`
880882
* `smallrye.jwt.sign.key`
881883

882884
[NOTE]
883885
====
884-
Additionally, if you do not specify the issuer information (using the `mp.jwt.verify.issuer` property), the {extension-name} extension will set a default issuer as `https://quarkus.io/issuer`.
886+
In *dev* mode, if you do not explicitly configure the issuer using the `mp.jwt.verify.issuer` property, the {extension-name} extension will set a default issuer of `https://quarkus.io/issuer`.
887+
888+
If you prefer to configure the issuer programmatically, set `mp.jwt.verify.issuer` to `NONE` to prevent the default value from being applied.
885889
====
886890

887891
[[integration-testing-wiremock]]

extensions/smallrye-jwt/deployment/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,12 @@
6565
<artifactId>rest-assured</artifactId>
6666
<scope>test</scope>
6767
</dependency>
68+
69+
<dependency>
70+
<groupId>org.assertj</groupId>
71+
<artifactId>assertj-core</artifactId>
72+
<scope>test</scope>
73+
</dependency>
6874
</dependencies>
6975

7076
<build>

extensions/smallrye-jwt/deployment/src/main/java/io/quarkus/smallrye/jwt/deployment/SmallryeJwtDevModeProcessor.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,12 @@ public class SmallryeJwtDevModeProcessor {
2828

2929
private static final String MP_JWT_VERIFY_PUBLIC_KEY = "mp.jwt.verify.publickey";
3030
private static final String MP_JWT_VERIFY_ISSUER = "mp.jwt.verify.issuer";
31+
private static final String MP_JWT_DECRYPT_KEY_LOCATION = "mp.jwt.decrypt.key.location";
3132

3233
private static final String SMALLRYE_JWT_NEW_TOKEN_ISSUER = "smallrye.jwt.new-token.issuer";
3334
private static final String SMALLRYE_JWT_SIGN_KEY_LOCATION = "smallrye.jwt.sign.key.location";
3435
private static final String SMALLRYE_JWT_SIGN_KEY = "smallrye.jwt.sign.key";
36+
private static final String SMALLRYE_JWT_ENCRYPT_KEY_LOCATION = "smallrye.jwt.encrypt.key.location";
3537

3638
private static final String NONE = "NONE";
3739
private static final String DEFAULT_ISSUER = "https://quarkus.io/issuer";
@@ -41,8 +43,10 @@ public class SmallryeJwtDevModeProcessor {
4143
private static final Set<String> JWT_SIGN_KEY_PROPERTIES = Set.of(
4244
MP_JWT_VERIFY_KEY_LOCATION,
4345
MP_JWT_VERIFY_PUBLIC_KEY,
46+
MP_JWT_DECRYPT_KEY_LOCATION,
4447
SMALLRYE_JWT_SIGN_KEY_LOCATION,
45-
SMALLRYE_JWT_SIGN_KEY);
48+
SMALLRYE_JWT_SIGN_KEY,
49+
SMALLRYE_JWT_ENCRYPT_KEY_LOCATION);
4650

4751
/**
4852
* This build step generates an RSA-256 key pair for development and test modes.
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package io.quarkus.jwt.test.dev;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import java.util.List;
6+
import java.util.function.Consumer;
7+
8+
import org.jboss.shrinkwrap.api.ShrinkWrap;
9+
import org.jboss.shrinkwrap.api.asset.StringAsset;
10+
import org.jboss.shrinkwrap.api.spec.JavaArchive;
11+
import org.junit.jupiter.api.Test;
12+
import org.junit.jupiter.api.extension.RegisterExtension;
13+
14+
import io.quarkus.builder.BuildChainBuilder;
15+
import io.quarkus.builder.BuildContext;
16+
import io.quarkus.builder.BuildStep;
17+
import io.quarkus.deployment.builditem.DevServicesResultBuildItem;
18+
import io.quarkus.deployment.builditem.FeatureBuildItem;
19+
import io.quarkus.test.QuarkusUnitTest;
20+
21+
public class SmallryeJwtLocationDevModeTest {
22+
23+
@RegisterExtension
24+
static QuarkusUnitTest unitTest = new QuarkusUnitTest()
25+
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
26+
.addAsResource(new StringAsset(
27+
"""
28+
smallrye.jwt.encrypt.key.location=/publicKey.pem
29+
mp.jwt.decrypt.key.location=/privateKey.pem
30+
"""), "application.properties")
31+
.addAsResource("publicKey.pem")
32+
.addAsResource("privateKey.pem"))
33+
.addBuildChainCustomizer(new Consumer<BuildChainBuilder>() {
34+
@Override
35+
public void accept(BuildChainBuilder chain) {
36+
chain.addBuildStep(new BuildStep() {
37+
@Override
38+
public void execute(BuildContext context) {
39+
List<DevServicesResultBuildItem> buildItems = context
40+
.consumeMulti(DevServicesResultBuildItem.class);
41+
assertThat(buildItems).filteredOn(item -> item.getName().equals("SMALLRYE_JWT"))
42+
.first()
43+
.satisfies(item -> {
44+
assertThat(item.getConfig())
45+
.containsEntry("mp.jwt.verify.publickey", "NONE")
46+
.containsEntry("smallrye.jwt.sign.key", "NONE");
47+
});
48+
context.produce(new FeatureBuildItem("dummy"));
49+
}
50+
})
51+
.consumes(DevServicesResultBuildItem.class)
52+
.produces(FeatureBuildItem.class)
53+
.build();
54+
}
55+
});
56+
57+
@Test
58+
void shouldNotConfigureAutomatically() {
59+
assertThat(true).isTrue();
60+
}
61+
62+
}

0 commit comments

Comments
 (0)