Создание конечной точки сервера аутентификации совместимо с Spring.security.oath2.resourceserver.jwt.jwk-set-uriJAVA

Программисты JAVA общаются здесь
Anonymous
Создание конечной точки сервера аутентификации совместимо с Spring.security.oath2.resourceserver.jwt.jwk-set-uri

Сообщение Anonymous »

У меня есть сервер аутентификации, который выдает токены JWT. Он использует библиотеку io.jsonwebtoken .
io.jsonwebtoken
jjwt-api
${jsonwebtoken.version}


io.jsonwebtoken
jjwt-impl
${jsonwebtoken.version}
runtime


io.jsonwebtoken
jjwt-jackson
${jsonwebtoken.version}
runtime

< /code>
import io.jsonwebtoken.Jwts;
import org.springframework.stereotype.Service;

import java.security.KeyPair;
import java.sql.Date;
import java.time.DayOfWeek;
import java.time.LocalDate;

@Service
public class JwtTokenService implements TokenService {

private final KeyPair keyPair;

public JwtTokenService(KeyPair keyPair) {
this.keyPair = keyPair;
}

@Override
public String generateTokenFor(User user) {
return Jwts.builder()
.setSubject(user.getName())
.claim(AppClaims.USERID, user.getId())
.setExpiration(Date.valueOf(LocalDate.now()
.plusDays(DayOfWeek.values().length)))
.signWith(keyPair.getPrivate())
.compact();
}
}
< /code>
@Bean
public KeyPair keyPair() {
return Keys.keyPairFor(SignatureAlgorithm.RS256);
}
< /code>
У меня также есть клиент, который полагается на стартер Spring OAuth2: < /p>

org.springframework.boot
spring-boot-starter-parent
3.4.5






org.springframework.boot
spring-boot-starter-oauth2-resource-server

< /code>
На данный момент клиент знает закрытый ключ сервера аутентификации и использует его для декодирования JWTs сервера. Лучший подход будет для клиента, чтобы получить открытый ключ сервера аутентификации и вместо этого использовать его. Насколько я понимаю, мне нужно сделать на стороне клиента, это указать это свойство: < /p>
spring.security.oauth2.resourceserver.jwt.jwk-set-uri = ${JWK_SET_URI:http://localhost:8100/oauth2/jwks}

Spring Boot, я полагаю, создаст для меня jwtdecoder , которая нанесет эту конечную точку (a Get без параметров или переменных пути, я полагаю) и извлечет общедоступный ключ для декодирования входящего jwts. Но он рад. Видимо, моя конечная точка должна вернуть что-то вроде этого: < /p>
{
keys: [
{
"kty":"EC",
"crv":"P-256",
"x":"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU",
"y":"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0",
"kid":"Public key used in JWS spec Appendix A.3 example"
}
]
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... y-oauth2-r

Вернуться в «JAVA»