You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by nd...@apache.org on 2024/04/05 20:02:22 UTC
(tika) branch TIKA-4237-Add-JWT-authentication-ability-to-the-http-fetcher created (now 31cbfecc8)
This is an automated email from the ASF dual-hosted git repository.
ndipiazza pushed a change to branch TIKA-4237-Add-JWT-authentication-ability-to-the-http-fetcher
in repository https://gitbox.apache.org/repos/asf/tika.git
at 31cbfecc8 jwt fetcher initial commit
This branch includes the following new commits:
new 31cbfecc8 jwt fetcher initial commit
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
(tika) 01/01: jwt fetcher initial commit
Posted by nd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ndipiazza pushed a commit to branch TIKA-4237-Add-JWT-authentication-ability-to-the-http-fetcher
in repository https://gitbox.apache.org/repos/asf/tika.git
commit 31cbfecc89d84fee15b318c7b576bb9a8c5085fa
Author: Nicholas DiPiazza <nd...@apache.org>
AuthorDate: Thu Apr 4 07:43:23 2024 -0500
jwt fetcher initial commit
---
tika-pipes/tika-fetchers/tika-fetcher-http/pom.xml | 7 ++-
.../tika/pipes/fetcher/http/JwtGenerator.java | 63 ++++++++++++++++++++++
2 files changed, 69 insertions(+), 1 deletion(-)
diff --git a/tika-pipes/tika-fetchers/tika-fetcher-http/pom.xml b/tika-pipes/tika-fetchers/tika-fetcher-http/pom.xml
index e759879c1..5f664108c 100644
--- a/tika-pipes/tika-fetchers/tika-fetcher-http/pom.xml
+++ b/tika-pipes/tika-fetchers/tika-fetcher-http/pom.xml
@@ -45,6 +45,11 @@
<artifactId>tika-httpclient-commons</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>com.nimbusds</groupId>
+ <artifactId>nimbus-jose-jwt</artifactId>
+ <version>9.5</version>
+ </dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>tika-core</artifactId>
@@ -127,4 +132,4 @@
<scm>
<tag>3.0.0-BETA-rc1</tag>
</scm>
-</project>
\ No newline at end of file
+</project>
diff --git a/tika-pipes/tika-fetchers/tika-fetcher-http/src/main/java/org/apache/tika/pipes/fetcher/http/JwtGenerator.java b/tika-pipes/tika-fetchers/tika-fetcher-http/src/main/java/org/apache/tika/pipes/fetcher/http/JwtGenerator.java
new file mode 100644
index 000000000..13e936270
--- /dev/null
+++ b/tika-pipes/tika-fetchers/tika-fetcher-http/src/main/java/org/apache/tika/pipes/fetcher/http/JwtGenerator.java
@@ -0,0 +1,63 @@
+package org.apache.tika.pipes.fetcher.http;
+
+import java.security.KeyPairGenerator;
+import java.security.PrivateKey;
+import java.security.SecureRandom;
+import java.time.Instant;
+import java.time.temporal.ChronoUnit;
+import java.util.Date;
+
+import com.nimbusds.jose.JOSEException;
+import com.nimbusds.jose.JWSAlgorithm;
+import com.nimbusds.jose.JWSHeader;
+import com.nimbusds.jose.JWSSigner;
+import com.nimbusds.jose.crypto.MACSigner;
+import com.nimbusds.jose.crypto.RSASSASigner;
+import com.nimbusds.jwt.JWTClaimsSet;
+import com.nimbusds.jwt.SignedJWT;
+
+public class JwtGenerator {
+ public static void main(String[] args) throws Exception {
+ KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
+ keyPairGenerator.initialize(2048);
+ byte[] randomBytes = new byte[32];
+ new SecureRandom().nextBytes(randomBytes);
+ System.out.println(jwt(randomBytes, "nick", "subject", 120));
+ System.out.println(jwt(keyPairGenerator.generateKeyPair().getPrivate(), "nick", "subject", 120));
+ }
+
+ public static String jwt(byte[] secret, String issuer, String subject,
+ int expiresInSeconds)
+ throws JOSEException {
+ JWSSigner signer = new MACSigner(secret);
+
+ JWTClaimsSet claimsSet = getJwtClaimsSet(issuer, subject, expiresInSeconds);
+
+ SignedJWT signedJWT = new SignedJWT(new JWSHeader(JWSAlgorithm.HS256), claimsSet);
+ signedJWT.sign(signer);
+
+ return signedJWT.serialize();
+ }
+
+ private static JWTClaimsSet getJwtClaimsSet(String issuer, String subject, int expiresInSeconds) {
+ return new JWTClaimsSet.Builder()
+ .subject(subject)
+ .issuer(issuer)
+ .expirationTime(Date.from(Instant.now().plus(expiresInSeconds, ChronoUnit.SECONDS)))
+ .build();
+ }
+
+ public static String jwt(PrivateKey privateKey, String issuer, String subject,
+ int expiresInSeconds)
+ throws JOSEException {
+ JWSSigner signer = new RSASSASigner(privateKey);
+
+ JWTClaimsSet claimsSet = getJwtClaimsSet(issuer, subject, expiresInSeconds);
+
+ SignedJWT signedJWT = new SignedJWT(new JWSHeader(JWSAlgorithm.RS256), claimsSet);
+
+ signedJWT.sign(signer);
+
+ return signedJWT.serialize();
+ }
+}