Skip to content

Commit 2cc0e40

Browse files
author
muha
committed
remove duplicate
1 parent 7f06cef commit 2cc0e40

File tree

4 files changed

+143
-229
lines changed

4 files changed

+143
-229
lines changed

client-credentials/src/main/java/com/example/security/dpop/DPoPProofBuilder.java

Lines changed: 26 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -2,33 +2,27 @@
22

33
import com.example.config.OAuth2ClientDetailProperties.Registration;
44
import com.example.utils.CertificateUtils;
5-
import com.example.utils.JWK2PEM;
6-
import com.example.utils.PathResolver;
7-
import com.example.utils.XMLSec2PEM;
85
import com.nimbusds.jose.JOSEException;
9-
import com.nimbusds.jose.JOSEObjectType;
10-
import com.nimbusds.jose.JWSAlgorithm;
11-
import com.nimbusds.jose.JWSHeader;
12-
import com.nimbusds.jose.JWSSigner;
13-
import com.nimbusds.jose.crypto.RSASSASigner;
14-
import com.nimbusds.jose.jwk.JWK;
15-
import com.nimbusds.jose.jwk.KeyType;
6+
import com.nimbusds.jose.jwk.JWKSet;
167
import com.nimbusds.jose.jwk.RSAKey;
17-
import com.nimbusds.jwt.JWTClaimsSet;
18-
import com.nimbusds.jwt.JWTClaimsSet.Builder;
19-
import com.nimbusds.jwt.SignedJWT;
8+
import com.nimbusds.jose.jwk.source.ImmutableJWKSet;
9+
import com.nimbusds.jose.jwk.source.JWKSource;
10+
import com.nimbusds.jose.proc.SecurityContext;
2011
import java.io.IOException;
21-
import java.nio.file.Files;
22-
import java.nio.file.Path;
2312
import java.security.NoSuchAlgorithmException;
2413
import java.security.interfaces.RSAPrivateKey;
25-
import java.security.interfaces.RSAPublicKey;
2614
import java.security.spec.InvalidKeySpecException;
27-
import java.util.Date;
15+
import java.time.Instant;
2816
import java.util.Map;
2917
import java.util.UUID;
3018
import lombok.extern.slf4j.Slf4j;
3119
import org.springframework.security.oauth2.client.registration.ClientRegistration;
20+
import org.springframework.security.oauth2.jwt.JwsHeader;
21+
import org.springframework.security.oauth2.jwt.Jwt;
22+
import org.springframework.security.oauth2.jwt.JwtClaimsSet;
23+
import org.springframework.security.oauth2.jwt.JwtClaimsSet.Builder;
24+
import org.springframework.security.oauth2.jwt.JwtEncoderParameters;
25+
import org.springframework.security.oauth2.jwt.NimbusJwtEncoder;
3226

3327
@Slf4j
3428
public class DPoPProofBuilder {
@@ -56,72 +50,40 @@ public String createDPoPProof(
5650
try {
5751

5852
RSAPrivateKey privateKey = getRsaPrivateKey(registration);
59-
RSAPublicKey publicKey = (RSAPublicKey) CertificateUtils.getPublicKey(privateKey);
60-
JWK jwk = new RSAKey.Builder(publicKey).build();
53+
RSAKey rsaKey = CertificateUtils.getRsaKey(privateKey, null);
6154

62-
JWSHeader header =
63-
new JWSHeader.Builder(resolveAlgorithm(jwk))
64-
.type(new JOSEObjectType("dpop+jwt"))
65-
.jwk(jwk)
55+
JWKSource<SecurityContext> jwkSource = new ImmutableJWKSet<>(new JWKSet(rsaKey));
56+
NimbusJwtEncoder jwtEncoder = new NimbusJwtEncoder(jwkSource);
57+
58+
JwsHeader jwsHeader =
59+
JwsHeader.with(CertificateUtils.resolveAlgorithm(rsaKey))
60+
.jwk(rsaKey.toPublicJWK().toJSONObject())
61+
.header("typ", "dpop+jwt")
6662
.build();
67-
JWSSigner signer = new RSASSASigner(privateKey);
6863

6964
Builder builder =
70-
new Builder()
71-
.jwtID(UUID.randomUUID().toString())
72-
.issueTime(new Date())
73-
.claim("htm", httpMethod)
74-
.claim("htu", url);
65+
JwtClaimsSet.builder().issuedAt(Instant.now()).claim("htm", httpMethod).claim("htu", url);
66+
7567
if (ath != null) {
7668
builder.claim("ath", ath);
7769
}
7870
if (nonce != null) {
7971
builder.claim("nonce", nonce);
8072
}
81-
JWTClaimsSet claimsSet = builder.build();
73+
JwtClaimsSet claims = builder.id(UUID.randomUUID().toString()).build();
8274

83-
SignedJWT signedJWT = new SignedJWT(header, claimsSet);
84-
signedJWT.sign(signer);
85-
86-
return signedJWT.serialize();
75+
Jwt jws = jwtEncoder.encode(JwtEncoderParameters.from(jwsHeader, claims));
76+
return jws.getTokenValue();
8777
} catch (Exception e) {
8878
log.error(e.getMessage(), e);
8979
}
9080

9181
return null;
9282
}
9383

94-
private static JWSAlgorithm resolveAlgorithm(JWK jwk) {
95-
JWSAlgorithm jwsAlgorithm = null;
96-
97-
if (KeyType.RSA.equals(jwk.getKeyType())) {
98-
jwsAlgorithm = JWSAlgorithm.RS256;
99-
} else if (KeyType.EC.equals(jwk.getKeyType())) {
100-
jwsAlgorithm = JWSAlgorithm.ES256;
101-
} else if (KeyType.OCT.equals(jwk.getKeyType())) {
102-
jwsAlgorithm = JWSAlgorithm.HS256;
103-
}
104-
return jwsAlgorithm;
105-
}
106-
10784
private RSAPrivateKey getRsaPrivateKey(Registration registration)
10885
throws IOException, NoSuchAlgorithmException, InvalidKeySpecException {
109-
RSAPrivateKey privateKey;
110-
if (registration.getPrivateKey().endsWith(".pem")) {
111-
final String pem = Files.readString(
112-
Path.of(PathResolver.getURI(registration.getPrivateKey())));
113-
privateKey = (RSAPrivateKey) CertificateUtils.getPrivateKey(pem);
114-
} else if (registration.getPrivateKey().endsWith(".xml")) {
115-
final String pem = XMLSec2PEM.getPem(
116-
PathResolver.getInputStream(registration.getPrivateKey()));
117-
privateKey = (RSAPrivateKey) CertificateUtils.getPrivateKey(pem);
118-
} else if (registration.getPrivateKey().endsWith(".json")) {
119-
final String pem = JWK2PEM.getPem(PathResolver.getInputStream(registration.getPrivateKey()));
120-
privateKey = (RSAPrivateKey) CertificateUtils.getPrivateKey(pem);
121-
} else {
122-
final String pem = registration.getPrivateKey();
123-
privateKey = (RSAPrivateKey) CertificateUtils.getPrivateKey(pem);
124-
}
125-
return privateKey;
86+
String privateKeyValue = registration.getPrivateKey();
87+
return CertificateUtils.getRsaPrivateKey(privateKeyValue);
12688
}
12789
}

client-credentials/src/main/java/com/example/service/HelseIDJwtAuthenticationConverter.java

Lines changed: 0 additions & 65 deletions
This file was deleted.

0 commit comments

Comments
 (0)