Public Access
Changed from JWT token to public/privat key
This commit is contained in:
1 parent
b7efe27a54
commit
dbea8922d5
5 files changed
+135
-18
No files matched your search
@@ -0,0 +1,102 @@
|
||||
package core_service.configuration.security;
|
||||
|
||||
import core_service.shared.test.AbstractUnitTest;
|
||||
import io.jsonwebtoken.Jwts;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.Mock;
|
||||
|
||||
import java.security.KeyPair;
|
||||
import java.security.KeyPairGenerator;
|
||||
import java.security.PrivateKey;
|
||||
import java.util.Base64;
|
||||
import java.util.Date;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.mockito.Mockito.lenient;
|
||||
|
||||
/**
|
||||
* Tests Core's verify-only JwtService against tokens signed with a matching Ed25519 private key.
|
||||
*/
|
||||
class JwtServiceTest extends AbstractUnitTest {
|
||||
|
||||
@Mock
|
||||
private JwtConfig jwtConfig;
|
||||
|
||||
private JwtService jwtService;
|
||||
private PrivateKey signingKey;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() throws Exception {
|
||||
KeyPair keyPair = KeyPairGenerator.getInstance("Ed25519").generateKeyPair();
|
||||
signingKey = keyPair.getPrivate();
|
||||
String publicB64 = Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded());
|
||||
|
||||
lenient().when(jwtConfig.getPublicKey()).thenReturn(publicB64);
|
||||
|
||||
jwtService = new JwtService(jwtConfig);
|
||||
jwtService.init();
|
||||
}
|
||||
|
||||
private String signToken(String userId, String email, Long steamId) {
|
||||
var builder = Jwts.builder()
|
||||
.subject(email)
|
||||
.claim("userId", userId)
|
||||
.issuedAt(new Date())
|
||||
.expiration(new Date(System.currentTimeMillis() + 60_000));
|
||||
if (steamId != null) {
|
||||
builder.claim("steamId", steamId);
|
||||
}
|
||||
return builder.signWith(signingKey, Jwts.SIG.EdDSA).compact();
|
||||
}
|
||||
|
||||
@Test
|
||||
void extractEmail_Success() {
|
||||
var email = "test@example.com";
|
||||
var token = signToken("0815", email, null);
|
||||
|
||||
assertEquals(email, jwtService.extractEmail(token));
|
||||
}
|
||||
|
||||
@Test
|
||||
void extractUserId_Success() {
|
||||
var userId = "0815";
|
||||
var token = signToken(userId, "test@example.com", null);
|
||||
|
||||
assertEquals(userId, jwtService.extractUserId(token));
|
||||
}
|
||||
|
||||
@Test
|
||||
void extractSteamId_Success() {
|
||||
var steamId = 123456789L;
|
||||
var token = signToken("0815", "test@example.com", steamId);
|
||||
|
||||
assertEquals(steamId, jwtService.extractSteamId(token));
|
||||
}
|
||||
|
||||
@Test
|
||||
void isTokenValid_Success() {
|
||||
var token = signToken("0815", "test@example.com", null);
|
||||
|
||||
assertTrue(jwtService.isTokenValid(token));
|
||||
}
|
||||
|
||||
@Test
|
||||
void isTokenValid_Failure_garbage() {
|
||||
assertFalse(jwtService.isTokenValid("not-a-jwt"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void isTokenValid_Failure_wrongKey() throws Exception {
|
||||
KeyPair other = KeyPairGenerator.getInstance("Ed25519").generateKeyPair();
|
||||
String token = Jwts.builder()
|
||||
.subject("test@example.com")
|
||||
.expiration(new Date(System.currentTimeMillis() + 60_000))
|
||||
.signWith(other.getPrivate(), Jwts.SIG.EdDSA)
|
||||
.compact();
|
||||
|
||||
assertFalse(jwtService.isTokenValid(token));
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user