40 lines
1.6 KiB
Java
40 lines
1.6 KiB
Java
package com.baiyue.auth.controller;
|
|
|
|
import com.baiyue.auth.config.UnifiedJwtProperties;
|
|
import com.nimbusds.jose.JWSAlgorithm;
|
|
import com.nimbusds.jose.jwk.JWKSet;
|
|
import com.nimbusds.jose.jwk.KeyUse;
|
|
import com.nimbusds.jose.jwk.RSAKey;
|
|
import com.nimbusds.jose.util.Base64URL;
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
import java.math.BigInteger;
|
|
import java.time.Duration;
|
|
import java.util.List;
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
|
|
class JwksControllerTest {
|
|
@Test
|
|
void publishesOnlyPublicKeyMaterialForCurrentAndPreviousKeys() throws Exception {
|
|
RSAKey current = key("current", true);
|
|
RSAKey previous = key("previous", false);
|
|
String json = new JWKSet(List.of(current, previous)).toString(false);
|
|
var properties = new UnifiedJwtProperties(json, "current");
|
|
|
|
var body = new JwksController(properties).jwks().getBody();
|
|
String published = new com.fasterxml.jackson.databind.ObjectMapper().writeValueAsString(body);
|
|
|
|
assertThat(published).contains("current", "previous", "\"n\"", "\"e\"")
|
|
.doesNotContain("\"d\"", "\"p\"", "\"q\"", "\"dp\"", "\"dq\"", "\"qi\"");
|
|
}
|
|
|
|
private RSAKey key(String kid, boolean privatePart) {
|
|
RSAKey.Builder builder = new RSAKey.Builder(
|
|
Base64URL.encode(BigInteger.valueOf(3233)), Base64URL.encode(BigInteger.valueOf(17)))
|
|
.keyID(kid).keyUse(KeyUse.SIGNATURE).algorithm(JWSAlgorithm.RS256);
|
|
if (privatePart) builder.privateExponent(Base64URL.encode(BigInteger.valueOf(2753)));
|
|
return builder.build();
|
|
}
|
|
}
|