30 lines
1.2 KiB
Java
30 lines
1.2 KiB
Java
package com.baiyue.auth.controller;
|
|
|
|
import com.baiyue.auth.config.UnifiedJwtProperties;
|
|
import com.nimbusds.jose.jwk.JWKSet;
|
|
import io.swagger.v3.oas.annotations.Operation;
|
|
import io.swagger.v3.oas.annotations.security.SecurityRequirements;
|
|
import org.springframework.http.CacheControl;
|
|
import org.springframework.http.ResponseEntity;
|
|
import org.springframework.web.bind.annotation.GetMapping;
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
|
|
import java.util.Map;
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
/** 发布统一 JWT 的 RSA 公钥。 */
|
|
@RestController
|
|
public class JwksController {
|
|
private final UnifiedJwtProperties properties;
|
|
|
|
public JwksController(UnifiedJwtProperties properties) { this.properties = properties; }
|
|
|
|
@GetMapping("/api/auth/.well-known/jwks.json")
|
|
@SecurityRequirements
|
|
@Operation(summary = "获取统一 JWT 公钥集", description = "仅发布当前和轮换期上一把 RSA 公钥,不包含私钥。")
|
|
public ResponseEntity<Map<String, Object>> jwks() throws Exception {
|
|
return ResponseEntity.ok().cacheControl(CacheControl.maxAge(5, TimeUnit.MINUTES).cachePublic())
|
|
.body(JWKSet.parse(properties.rsaJwkSet()).toPublicJWKSet().toJSONObject());
|
|
}
|
|
}
|