51 lines
1.9 KiB
Java
51 lines
1.9 KiB
Java
package com.baiyue.common.security;
|
|||
|
|
|
||
|
|
import org.junit.jupiter.api.Test;
|
||
|
|
import org.springframework.security.oauth2.jwt.Jwt;
|
||
|
|
|
||
|
|
import java.time.Instant;
|
||
|
|
import java.util.List;
|
||
|
|
|
||
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
||
|
|
|
||
|
|
class JwtClaimsMapperTest {
|
||
|
|
@Test
|
||
|
|
void mapsTenantUserRolesAndPermissions() {
|
||
|
|
Jwt jwt = Jwt.withTokenValue("token")
|
||
|
|
.header("alg", "none")
|
||
|
|
.subject("subject")
|
||
|
|
.issuedAt(Instant.now())
|
||
|
|
.expiresAt(Instant.now().plusSeconds(60))
|
||
|
|
.claim("user_id", 42L)
|
||
|
|
.claim("tenant_id", "7")
|
||
|
|
.claim("username", "alice")
|
||
|
|
.claim("app_code", "MERCHANT")
|
||
|
|
.claim("client_type", "MERCHANT")
|
||
|
|
.claim("permissions", List.of("order:read", "order:create"))
|
||
|
|
.claim("roles", List.of("ADMIN"))
|
||
|
|
.build();
|
||
|
|
|
||
|
|
BaiyueJwtAuthenticationToken authentication = new JwtClaimsMapper().map(jwt);
|
||
|
|
assertThat(authentication.getPrincipal().userId()).isEqualTo(42L);
|
||
|
|
assertThat(authentication.getPrincipal().tenantId()).isEqualTo(7L);
|
||
|
|
assertThat(authentication.getAuthorities()).extracting("authority")
|
||
|
|
.contains("order:read", "order:create", "ROLE_ADMIN", "APP_MERCHANT");
|
||
|
|
}
|
||
|
|
|
||
|
|
@Test
|
||
|
|
void fallsBackToNumericSubjectForUserId() {
|
||
|
|
Jwt jwt = Jwt.withTokenValue("token")
|
||
|
|
.header("alg", "none")
|
||
|
|
.subject("99")
|
||
|
|
.issuedAt(Instant.now())
|
||
|
|
.expiresAt(Instant.now().plusSeconds(60))
|
||
|
|
.claim("tenant_id", 0L)
|
||
|
|
.claim("app_code", "PLATFORM")
|
||
|
|
.build();
|
||
|
|
|
||
|
|
BaiyueJwtAuthenticationToken authentication = new JwtClaimsMapper().map(jwt);
|
||
|
|
assertThat(authentication.getPrincipal().userId()).isEqualTo(99L);
|
||
|
|
assertThat(authentication.getAuthorities()).extracting("authority").contains("APP_PLATFORM");
|
||
|
|
}
|
||
|
|
}
|