From d723bd4aca4a6ec0692fe49ba79a90905594af5b Mon Sep 17 00:00:00 2001 From: JaeSeo Yang <96044622+psychology50@users.noreply.github.com> Date: Mon, 1 Apr 2024 22:20:34 +0900 Subject: [PATCH 01/27] =?UTF-8?q?chore:=20infra=20=EB=AA=A8=EB=93=88=20?= =?UTF-8?q?=EB=82=B4=20feign=20=EC=9D=98=EC=A1=B4=EC=84=B1=20=EC=A3=BC?= =?UTF-8?q?=EC=9E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pennyway-infra/build.gradle | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/pennyway-infra/build.gradle b/pennyway-infra/build.gradle index f2e1c0b01..8631172c7 100644 --- a/pennyway-infra/build.gradle +++ b/pennyway-infra/build.gradle @@ -1,5 +1,5 @@ -bootJar {enabled = false} -jar {enabled = true} +bootJar { enabled = false } +jar { enabled = true } dependencies { implementation project(':pennyway-common') @@ -11,4 +11,9 @@ dependencies { /* redis */ api 'org.springframework.boot:spring-boot-starter-data-redis' + + /* feign */ + implementation platform("org.springframework.cloud:spring-cloud-dependencies:2023.0.1") + implementation 'org.springframework.cloud:spring-cloud-starter-openfeign:4.1.1' + implementation 'io.github.openfeign:feign-okhttp:13.2' } From c555ff331393f9706622df3b9b30cba63cfdbb17 Mon Sep 17 00:00:00 2001 From: JaeSeo Yang <96044622+psychology50@users.noreply.github.com> Date: Tue, 2 Apr 2024 10:38:01 +0900 Subject: [PATCH 02/27] =?UTF-8?q?feat:=20oidc=20dto=20=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../infra/common/oidc/OIDCDecodePayload.java | 12 ++++++++++++ .../co/pennyway/infra/common/oidc/OIDCPublicKey.java | 11 +++++++++++ 2 files changed, 23 insertions(+) create mode 100644 pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OIDCDecodePayload.java create mode 100644 pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OIDCPublicKey.java diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OIDCDecodePayload.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OIDCDecodePayload.java new file mode 100644 index 000000000..1ee9a5574 --- /dev/null +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OIDCDecodePayload.java @@ -0,0 +1,12 @@ +package kr.co.pennyway.infra.common.oidc; + +public record OIDCDecodePayload( + /* issuer */ + String iss, + /* client id */ + String aud, + /* aouth provider account unique id */ + String sub, + String email +) { +} diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OIDCPublicKey.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OIDCPublicKey.java new file mode 100644 index 000000000..d9aea9a6f --- /dev/null +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OIDCPublicKey.java @@ -0,0 +1,11 @@ +package kr.co.pennyway.infra.common.oidc; + +public record OIDCPublicKey( + String kid, + String kty, + String alg, + String use, + String n, + String e +) { +} From 6f2efeaeffd185d024498c73a3bab6666229b43f Mon Sep 17 00:00:00 2001 From: JaeSeo Yang <96044622+psychology50@users.noreply.github.com> Date: Tue, 2 Apr 2024 10:39:24 +0900 Subject: [PATCH 03/27] =?UTF-8?q?feat:=20oidc=20public=20key=20response=20?= =?UTF-8?q?=EA=B0=9D=EC=B2=B4=20=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/oidc/OIDCPublicKeyResponse.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OIDCPublicKeyResponse.java diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OIDCPublicKeyResponse.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OIDCPublicKeyResponse.java new file mode 100644 index 000000000..77d4de757 --- /dev/null +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OIDCPublicKeyResponse.java @@ -0,0 +1,19 @@ +package kr.co.pennyway.infra.common.oidc; + +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Getter +@NoArgsConstructor +public class OIDCPublicKeyResponse { + List keys; + + @Override + public String toString() { + return "OIDCPublicKeyResponse{" + + "keys=" + keys + + '}'; + } +} From 5e0cf2388643535708d0d9a131288be642d09c59 Mon Sep 17 00:00:00 2001 From: JaeSeo Yang <96044622+psychology50@users.noreply.github.com> Date: Tue, 2 Apr 2024 10:57:32 +0900 Subject: [PATCH 04/27] =?UTF-8?q?feat:=20oauth=20oidc=20client=20=EC=9D=B8?= =?UTF-8?q?=ED=84=B0=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kr/co/pennyway/infra/common/oidc/OauthOidcClient.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOidcClient.java diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOidcClient.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOidcClient.java new file mode 100644 index 000000000..5e4940612 --- /dev/null +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOidcClient.java @@ -0,0 +1,5 @@ +package kr.co.pennyway.infra.common.oidc; + +public interface OauthOidcClient { + OIDCPublicKeyResponse getOIDCPublicKey(); +} From 893b59c44e2df4cb7c4cd988e5856c7930b31605 Mon Sep 17 00:00:00 2001 From: JaeSeo Yang <96044622+psychology50@users.noreply.github.com> Date: Tue, 2 Apr 2024 10:58:13 +0900 Subject: [PATCH 05/27] =?UTF-8?q?feat:=20oidc=20token=20parsing=20provider?= =?UTF-8?q?=20=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../infra/common/oidc/OauthOIDCProvider.java | 24 ++++ .../common/oidc/OauthOIDCProviderImpl.java | 105 ++++++++++++++++++ 2 files changed, 129 insertions(+) create mode 100644 pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOIDCProvider.java create mode 100644 pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOIDCProviderImpl.java diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOIDCProvider.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOIDCProvider.java new file mode 100644 index 000000000..cd9a28fb8 --- /dev/null +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOIDCProvider.java @@ -0,0 +1,24 @@ +package kr.co.pennyway.infra.common.oidc; + +public interface OauthOIDCProvider { + /** + * ID Token의 header에서 kid를 추출하는 메서드 + * + * @param token : idToken + * @param iss : ID Token을 발급한 OAuth 2.0 제공자의 URL + * @param aud : ID Token이 발급된 앱의 앱 키 + * @param nonce : 인증 서버 로그인 요청 시 전달한 임의의 문자열 + * @return kid : ID Token의 서명에 사용된 공개키의 ID + */ + String getKidFromUnsignedTokenHeader(String token, String iss, String aud, String nonce); + + /** + * ID Token의 payload를 추출하는 메서드 + * + * @param token : idToken + * @param modulus : 공개키 모듈(n) + * @param exponent : 공개키 지수(e) + * @return OIDCDecodePayload : ID Token의 payload + */ + OIDCDecodePayload getOIDCTokenBody(String token, String modulus, String exponent); +} diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOIDCProviderImpl.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOIDCProviderImpl.java new file mode 100644 index 000000000..89f73e211 --- /dev/null +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOIDCProviderImpl.java @@ -0,0 +1,105 @@ +package kr.co.pennyway.infra.common.oidc; + +import io.jsonwebtoken.*; +import kr.co.pennyway.infra.common.exception.JwtErrorCode; +import kr.co.pennyway.infra.common.exception.JwtErrorException; +import kr.co.pennyway.infra.common.util.JwtErrorCodeUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.math.BigInteger; +import java.security.KeyFactory; +import java.security.NoSuchAlgorithmException; +import java.security.PublicKey; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.RSAPublicKeySpec; +import java.util.Base64; + +@Slf4j +@Component +public class OauthOIDCProviderImpl implements OauthOIDCProvider { + private static final String KID = "kid"; + private static final String RSA = "RSA"; + + @Override + public String getKidFromUnsignedTokenHeader(String token, String iss, String aud, String nonce) { + return (String) getUnsignedTokenClaims(token, iss, aud, nonce).getHeader().get(KID); + } + + @Override + public OIDCDecodePayload getOIDCTokenBody(String token, String modulus, String exponent) { + Claims body = getOIDCTokenJws(token, modulus, exponent).getPayload(); + String aud = body.getAudience().iterator().next(); // TODO: 이전 버전과 다르게 aud가 Set으로 변경되어 있음. 테스트 필요 + log.debug("aud : {}", aud); + + return new OIDCDecodePayload( + body.getIssuer(), + aud, + body.getSubject(), + body.get("email", String.class)); + } + + /** + * ID Token의 header와 body를 Base64 방식으로 디코딩하는 메서드
+ * payload의 iss, aud, exp, nonce를 검증하고, 실패시 예외 처리 + */ + private Jwt getUnsignedTokenClaims(String token, String iss, String aud, String nonce) { + try { + return Jwts.parser() + .requireAudience(aud) + .requireIssuer(iss) +// .require("nonce", nonce) // 현재는 nonce를 사용하지 않음 + .build() + .parseUnsecuredClaims(getUnsignedToken(token)); // TODO: 기존 방식은 parseClaimsJwt(getUnsignedToken(token)); -> 변경한 코드 정상 동작 여부 확인 필요 + } catch (JwtException e) { + final JwtErrorCode errorCode = JwtErrorCodeUtil.determineErrorCode(e, JwtErrorCode.FAILED_AUTHENTICATION); + + log.warn("Error code : {}, Error - {}, {}", errorCode, e.getClass(), e.getMessage()); + throw new JwtErrorException(errorCode); + } + } + + /** + * Token의 signature를 제거하는 메서드 + */ + private String getUnsignedToken(String token) { + String[] splitToken = token.split("\\."); + if (splitToken.length != 3) throw new JwtErrorException(JwtErrorCode.MALFORMED_TOKEN); + return splitToken[0] + "." + splitToken[1] + "."; + } + + /** + * 공개키로 서명을 검증하는 메서드 + */ + private Jws getOIDCTokenJws(String token, String modulus, String exponent) { + try { + log.info("token : {}", token); + return Jwts.parser() + .verifyWith(getRSAPublicKey(modulus, exponent)) + .build() + .parseSignedClaims(token); + } catch (JwtException e) { + final JwtErrorCode errorCode = JwtErrorCodeUtil.determineErrorCode(e, JwtErrorCode.FAILED_AUTHENTICATION); + + log.warn("Error code : {}, Error - {}, {}", errorCode, e.getClass(), e.getMessage()); + throw new JwtErrorException(errorCode); + } catch (NoSuchAlgorithmException | InvalidKeySpecException e) { + log.warn("Error - {}, {}", e.getClass(), e.getMessage()); + throw new JwtErrorException(JwtErrorCode.MALFORMED_TOKEN); + } + } + + /** + * n, e 조합으로 공개키를 생성하는 메서드 + */ + private PublicKey getRSAPublicKey(String modulus, String exponent) throws NoSuchAlgorithmException, InvalidKeySpecException { + KeyFactory keyFactory = KeyFactory.getInstance(RSA); + byte[] decodeN = Base64.getUrlDecoder().decode(modulus); + byte[] decodeE = Base64.getUrlDecoder().decode(exponent); + BigInteger n = new BigInteger(1, decodeN); + BigInteger e = new BigInteger(1, decodeE); + + RSAPublicKeySpec publicKeySpec = new RSAPublicKeySpec(n, e); + return keyFactory.generatePublic(publicKeySpec); + } +} \ No newline at end of file From e0f7eabac20cbf5432dfc9b99d822ef656a4fd08 Mon Sep 17 00:00:00 2001 From: JaeSeo Yang <96044622+psychology50@users.noreply.github.com> Date: Tue, 2 Apr 2024 10:59:48 +0900 Subject: [PATCH 06/27] =?UTF-8?q?feat:=20oidc=20provider=20=ED=99=98?= =?UTF-8?q?=EA=B2=BD=20=EB=B3=80=EC=88=98=20=EC=A0=95=EB=B3=B4=EB=A5=BC=20?= =?UTF-8?q?=EA=B0=80=EC=A0=B8=EC=98=AC=20=EC=9D=B8=ED=84=B0=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=8A=A4=20=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../infra/common/oidc/OauthOidcClientProperties.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOidcClientProperties.java diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOidcClientProperties.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOidcClientProperties.java new file mode 100644 index 000000000..f19495fd7 --- /dev/null +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOidcClientProperties.java @@ -0,0 +1,7 @@ +package kr.co.pennyway.infra.common.oidc; + +public interface OauthOidcClientProperties { + String getJwksUri(); + + String getClientSecret(); +} From 8db88623947e3068a4a9659fb2817e03f2aecabc Mon Sep 17 00:00:00 2001 From: JaeSeo Yang <96044622+psychology50@users.noreply.github.com> Date: Tue, 2 Apr 2024 11:26:49 +0900 Subject: [PATCH 07/27] =?UTF-8?q?rename:=20oidc=20=EC=B9=B4=EB=A9=9C?= =?UTF-8?q?=EC=BC=80=EC=9D=B4=EC=8A=A4=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kr/co/pennyway/infra/common/oidc/OauthOidcClient.java | 2 +- .../oidc/{OauthOIDCProvider.java => OauthOidcProvider.java} | 4 ++-- ...authOIDCProviderImpl.java => OauthOidcProviderImpl.java} | 6 +++--- .../oidc/{OIDCDecodePayload.java => OidcDecodePayload.java} | 2 +- .../common/oidc/{OIDCPublicKey.java => OidcPublicKey.java} | 2 +- ...IDCPublicKeyResponse.java => OidcPublicKeyResponse.java} | 4 ++-- 6 files changed, 10 insertions(+), 10 deletions(-) rename pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/{OauthOIDCProvider.java => OauthOidcProvider.java} (89%) rename pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/{OauthOIDCProviderImpl.java => OauthOidcProviderImpl.java} (96%) rename pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/{OIDCDecodePayload.java => OidcDecodePayload.java} (87%) rename pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/{OIDCPublicKey.java => OidcPublicKey.java} (84%) rename pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/{OIDCPublicKeyResponse.java => OidcPublicKeyResponse.java} (81%) diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOidcClient.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOidcClient.java index 5e4940612..0c4d217a1 100644 --- a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOidcClient.java +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOidcClient.java @@ -1,5 +1,5 @@ package kr.co.pennyway.infra.common.oidc; public interface OauthOidcClient { - OIDCPublicKeyResponse getOIDCPublicKey(); + OidcPublicKeyResponse getOIDCPublicKey(); } diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOIDCProvider.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOidcProvider.java similarity index 89% rename from pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOIDCProvider.java rename to pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOidcProvider.java index cd9a28fb8..57bd3938f 100644 --- a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOIDCProvider.java +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOidcProvider.java @@ -1,6 +1,6 @@ package kr.co.pennyway.infra.common.oidc; -public interface OauthOIDCProvider { +public interface OauthOidcProvider { /** * ID Token의 header에서 kid를 추출하는 메서드 * @@ -20,5 +20,5 @@ public interface OauthOIDCProvider { * @param exponent : 공개키 지수(e) * @return OIDCDecodePayload : ID Token의 payload */ - OIDCDecodePayload getOIDCTokenBody(String token, String modulus, String exponent); + OidcDecodePayload getOIDCTokenBody(String token, String modulus, String exponent); } diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOIDCProviderImpl.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOidcProviderImpl.java similarity index 96% rename from pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOIDCProviderImpl.java rename to pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOidcProviderImpl.java index 89f73e211..2010d14b2 100644 --- a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOIDCProviderImpl.java +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOidcProviderImpl.java @@ -17,7 +17,7 @@ @Slf4j @Component -public class OauthOIDCProviderImpl implements OauthOIDCProvider { +public class OauthOidcProviderImpl implements OauthOidcProvider { private static final String KID = "kid"; private static final String RSA = "RSA"; @@ -27,12 +27,12 @@ public String getKidFromUnsignedTokenHeader(String token, String iss, String aud } @Override - public OIDCDecodePayload getOIDCTokenBody(String token, String modulus, String exponent) { + public OidcDecodePayload getOIDCTokenBody(String token, String modulus, String exponent) { Claims body = getOIDCTokenJws(token, modulus, exponent).getPayload(); String aud = body.getAudience().iterator().next(); // TODO: 이전 버전과 다르게 aud가 Set으로 변경되어 있음. 테스트 필요 log.debug("aud : {}", aud); - return new OIDCDecodePayload( + return new OidcDecodePayload( body.getIssuer(), aud, body.getSubject(), diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OIDCDecodePayload.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OidcDecodePayload.java similarity index 87% rename from pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OIDCDecodePayload.java rename to pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OidcDecodePayload.java index 1ee9a5574..7049056fb 100644 --- a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OIDCDecodePayload.java +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OidcDecodePayload.java @@ -1,6 +1,6 @@ package kr.co.pennyway.infra.common.oidc; -public record OIDCDecodePayload( +public record OidcDecodePayload( /* issuer */ String iss, /* client id */ diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OIDCPublicKey.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OidcPublicKey.java similarity index 84% rename from pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OIDCPublicKey.java rename to pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OidcPublicKey.java index d9aea9a6f..0fe4011f1 100644 --- a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OIDCPublicKey.java +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OidcPublicKey.java @@ -1,6 +1,6 @@ package kr.co.pennyway.infra.common.oidc; -public record OIDCPublicKey( +public record OidcPublicKey( String kid, String kty, String alg, diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OIDCPublicKeyResponse.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OidcPublicKeyResponse.java similarity index 81% rename from pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OIDCPublicKeyResponse.java rename to pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OidcPublicKeyResponse.java index 77d4de757..15a392c67 100644 --- a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OIDCPublicKeyResponse.java +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OidcPublicKeyResponse.java @@ -7,8 +7,8 @@ @Getter @NoArgsConstructor -public class OIDCPublicKeyResponse { - List keys; +public class OidcPublicKeyResponse { + List keys; @Override public String toString() { From d1e3c835f161f52d32af03fb21130791ebdcb92e Mon Sep 17 00:00:00 2001 From: JaeSeo Yang <96044622+psychology50@users.noreply.github.com> Date: Tue, 2 Apr 2024 11:28:03 +0900 Subject: [PATCH 08/27] =?UTF-8?q?chore:=20provider=20=EB=B3=84=20jwks-uri?= =?UTF-8?q?=20=EB=B0=8F=20secret=20=ED=99=98=EA=B2=BD=EB=B3=80=EC=88=98=20?= =?UTF-8?q?=EC=A3=BC=EC=9E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application-infra.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/pennyway-infra/src/main/resources/application-infra.yml b/pennyway-infra/src/main/resources/application-infra.yml index f9c75be13..5b963497d 100644 --- a/pennyway-infra/src/main/resources/application-infra.yml +++ b/pennyway-infra/src/main/resources/application-infra.yml @@ -10,6 +10,19 @@ pennyway: local: ${PENNYWAY_DOMAIN_LOCAL} dev: ${PENNYWAY_DOMAIN_DEV} +oauth2: + client: + provider: + kakao: + jwks-uri: ${KAKAO_JWKS_URI} + secret: ${KAKAO_CLIENT_SECRET} + google: + jwks-uri: ${GOOGLE_JWKS_URI} + secret: ${GOOGLE_CLIENT_SECRET} + apple: + jwks-uri: ${APPLE_JWKS_URI} + secret: ${APPLE_CLIENT_SECRET} + --- spring: config: From dd5688839d3570167e7152c46969dfa30ced87f0 Mon Sep 17 00:00:00 2001 From: JaeSeo Yang <96044622+psychology50@users.noreply.github.com> Date: Tue, 2 Apr 2024 11:45:08 +0900 Subject: [PATCH 09/27] =?UTF-8?q?feat:=20apple,=20google,=20kakao=20oidc?= =?UTF-8?q?=20=ED=99=98=EA=B2=BD=20=EB=B3=80=EC=88=98=20=EC=A3=BC=EC=9E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/properties/AppleOidcProperties.java | 14 ++++++++++++++ .../common/properties/GoogleOidcProperties.java | 13 +++++++++++++ .../common/properties/KakaoOidcProperties.java | 13 +++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/AppleOidcProperties.java create mode 100644 pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/GoogleOidcProperties.java create mode 100644 pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/KakaoOidcProperties.java diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/AppleOidcProperties.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/AppleOidcProperties.java new file mode 100644 index 000000000..488223431 --- /dev/null +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/AppleOidcProperties.java @@ -0,0 +1,14 @@ +package kr.co.pennyway.infra.common.properties; + +import kr.co.pennyway.infra.common.oidc.OauthOidcClientProperties; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.boot.context.properties.ConfigurationProperties; + +@Getter +@RequiredArgsConstructor +@ConfigurationProperties(prefix = "oauth2.client.provider.apple") +public class AppleOidcProperties implements OauthOidcClientProperties { + private String jwksUri; + private String clientSecret; +} diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/GoogleOidcProperties.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/GoogleOidcProperties.java new file mode 100644 index 000000000..8990671e5 --- /dev/null +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/GoogleOidcProperties.java @@ -0,0 +1,13 @@ +package kr.co.pennyway.infra.common.properties; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.boot.context.properties.ConfigurationProperties; + +@Getter +@RequiredArgsConstructor +@ConfigurationProperties(prefix = "oauth2.client.provider.google") +public class GoogleOidcProperties { + private String jwksUri; + private String clientSecret; +} diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/KakaoOidcProperties.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/KakaoOidcProperties.java new file mode 100644 index 000000000..91ca273ff --- /dev/null +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/KakaoOidcProperties.java @@ -0,0 +1,13 @@ +package kr.co.pennyway.infra.common.properties; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.boot.context.properties.ConfigurationProperties; + +@Getter +@RequiredArgsConstructor +@ConfigurationProperties(prefix = "oauth2.client.provider.kakao") +public class KakaoOidcProperties { + private String jwksUri; + private String clientSecret; +} From 1c9c88e41aee23c3dde3783f63ab4a78b6e8aafe Mon Sep 17 00:00:00 2001 From: JaeSeo Yang <96044622+psychology50@users.noreply.github.com> Date: Tue, 2 Apr 2024 11:45:48 +0900 Subject: [PATCH 10/27] =?UTF-8?q?feat:=20oidc=20configuration=20properties?= =?UTF-8?q?=20config=20=EC=84=B8=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../infra/config/ConfigurationPropertiesConfig.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/ConfigurationPropertiesConfig.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/ConfigurationPropertiesConfig.java index 63c859194..5e4fc92cf 100644 --- a/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/ConfigurationPropertiesConfig.java +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/ConfigurationPropertiesConfig.java @@ -1,11 +1,17 @@ package kr.co.pennyway.infra.config; +import kr.co.pennyway.infra.common.properties.AppleOidcProperties; +import kr.co.pennyway.infra.common.properties.GoogleOidcProperties; +import kr.co.pennyway.infra.common.properties.KakaoOidcProperties; import kr.co.pennyway.infra.common.properties.ServerProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Configuration; @EnableConfigurationProperties({ - ServerProperties.class + ServerProperties.class, + AppleOidcProperties.class, + GoogleOidcProperties.class, + KakaoOidcProperties.class }) @Configuration public class ConfigurationPropertiesConfig { From c1990453512f03de96c887c9ade008d1f4edfa7c Mon Sep 17 00:00:00 2001 From: JaeSeo Yang <96044622+psychology50@users.noreply.github.com> Date: Tue, 2 Apr 2024 11:50:30 +0900 Subject: [PATCH 11/27] =?UTF-8?q?feat:=20default=20feign=20config=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../co/pennyway/infra/config/DefaultFeignConfig.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 pennyway-infra/src/main/java/kr/co/pennyway/infra/config/DefaultFeignConfig.java diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/DefaultFeignConfig.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/DefaultFeignConfig.java new file mode 100644 index 000000000..4bddc7644 --- /dev/null +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/DefaultFeignConfig.java @@ -0,0 +1,12 @@ +package kr.co.pennyway.infra.config; + +import feign.codec.Encoder; +import feign.form.FormEncoder; +import org.springframework.context.annotation.Bean; + +public class DefaultFeignConfig { + @Bean + Encoder formEncoder() { + return new FormEncoder(); + } +} From fb8a71ba9f536b0be6ac4e9b955053691ada9233 Mon Sep 17 00:00:00 2001 From: JaeSeo Yang <96044622+psychology50@users.noreply.github.com> Date: Tue, 2 Apr 2024 12:11:41 +0900 Subject: [PATCH 12/27] =?UTF-8?q?feat:=20common=20module=20=EB=82=B4=20map?= =?UTF-8?q?=20utils=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kr/co/pennyway/common/util/MapUtils.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 pennyway-common/src/main/java/kr/co/pennyway/common/util/MapUtils.java diff --git a/pennyway-common/src/main/java/kr/co/pennyway/common/util/MapUtils.java b/pennyway-common/src/main/java/kr/co/pennyway/common/util/MapUtils.java new file mode 100644 index 000000000..773e6dd2a --- /dev/null +++ b/pennyway-common/src/main/java/kr/co/pennyway/common/util/MapUtils.java @@ -0,0 +1,20 @@ +package kr.co.pennyway.common.util; + +import java.util.Map; + +/** + * Map 관련 유틸리티 클래스 + * + * @author YANG JAESEO + */ +public class MapUtils { + /** + * key에 해당하는 값을 반환하고, key가 없을 경우 defaultValue를 반환한다. + */ + public static V getObject(Map map, K key, V defaultValue) { + if (map == null || key == null) { + return defaultValue; + } + return map.getOrDefault(key, defaultValue); + } +} \ No newline at end of file From 64a303c75feab63b98e3fa3ba38526710c5da7df Mon Sep 17 00:00:00 2001 From: JaeSeo Yang <96044622+psychology50@users.noreply.github.com> Date: Tue, 2 Apr 2024 12:26:43 +0900 Subject: [PATCH 13/27] =?UTF-8?q?rename:=20oidc=20cache=20manager=20?= =?UTF-8?q?=EB=B9=88=20=EC=9D=B4=EB=A6=84=20=EC=98=A4=ED=83=80=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/kr/co/pennyway/infra/config/CacheConfig.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/CacheConfig.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/CacheConfig.java index 4c51e7a59..8646b42e2 100644 --- a/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/CacheConfig.java +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/CacheConfig.java @@ -3,11 +3,11 @@ import kr.co.pennyway.infra.common.annotation.InfraRedisConnectionFactory; import kr.co.pennyway.infra.common.annotation.OidcCacheManager; import kr.co.pennyway.infra.common.annotation.SecurityUserCacheManager; +import kr.co.pennyway.infra.common.importer.PennywayInfraConfig; import org.springframework.beans.factory.annotation.Value; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.data.redis.cache.CacheKeyPrefix; import org.springframework.data.redis.cache.RedisCacheConfiguration; @@ -23,9 +23,8 @@ import java.time.Duration; import java.util.Map; -@Configuration @EnableCaching -public class CacheConfig { +public class CacheConfig implements PennywayInfraConfig { private final String host; private final int port; private final String password; @@ -100,7 +99,7 @@ public CacheManager securityUserCacheManager(@InfraRedisConnectionFactory RedisC @Bean @OidcCacheManager - public CacheManager oidcCacheManger(@InfraRedisConnectionFactory RedisConnectionFactory cf) { + public CacheManager oidcCacheManager(@InfraRedisConnectionFactory RedisConnectionFactory cf) { RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig() .serializeKeysWith( RedisSerializationContext.SerializationPair.fromSerializer( From 36d675d04d587f62c17a499c951bafaec06cda3e Mon Sep 17 00:00:00 2001 From: JaeSeo Yang <96044622+psychology50@users.noreply.github.com> Date: Tue, 2 Apr 2024 12:39:58 +0900 Subject: [PATCH 14/27] =?UTF-8?q?fix:=20oidc=20properties=20=ED=95=84?= =?UTF-8?q?=EB=93=9C=20final=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../infra/common/properties/AppleOidcProperties.java | 4 ++-- .../infra/common/properties/GoogleOidcProperties.java | 7 ++++--- .../infra/common/properties/KakaoOidcProperties.java | 7 ++++--- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/AppleOidcProperties.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/AppleOidcProperties.java index 488223431..0e7ea2e16 100644 --- a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/AppleOidcProperties.java +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/AppleOidcProperties.java @@ -9,6 +9,6 @@ @RequiredArgsConstructor @ConfigurationProperties(prefix = "oauth2.client.provider.apple") public class AppleOidcProperties implements OauthOidcClientProperties { - private String jwksUri; - private String clientSecret; + private final String jwksUri; + private final String clientSecret; } diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/GoogleOidcProperties.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/GoogleOidcProperties.java index 8990671e5..da3d68262 100644 --- a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/GoogleOidcProperties.java +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/GoogleOidcProperties.java @@ -1,5 +1,6 @@ package kr.co.pennyway.infra.common.properties; +import kr.co.pennyway.infra.common.oidc.OauthOidcClientProperties; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -7,7 +8,7 @@ @Getter @RequiredArgsConstructor @ConfigurationProperties(prefix = "oauth2.client.provider.google") -public class GoogleOidcProperties { - private String jwksUri; - private String clientSecret; +public class GoogleOidcProperties implements OauthOidcClientProperties { + private final String jwksUri; + private final String clientSecret; } diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/KakaoOidcProperties.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/KakaoOidcProperties.java index 91ca273ff..4c0bcf18c 100644 --- a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/KakaoOidcProperties.java +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/KakaoOidcProperties.java @@ -1,5 +1,6 @@ package kr.co.pennyway.infra.common.properties; +import kr.co.pennyway.infra.common.oidc.OauthOidcClientProperties; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -7,7 +8,7 @@ @Getter @RequiredArgsConstructor @ConfigurationProperties(prefix = "oauth2.client.provider.kakao") -public class KakaoOidcProperties { - private String jwksUri; - private String clientSecret; +public class KakaoOidcProperties implements OauthOidcClientProperties { + private final String jwksUri; + private final String clientSecret; } From 52e80e9e5aa0f6bc0d0fa07eee3ac67f88010944 Mon Sep 17 00:00:00 2001 From: JaeSeo Yang <96044622+psychology50@users.noreply.github.com> Date: Tue, 2 Apr 2024 13:06:24 +0900 Subject: [PATCH 15/27] =?UTF-8?q?fix:=20infra=20properties=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20api=20=EB=AA=A8=EB=93=88=EB=A1=9C=20=EC=9D=B4?= =?UTF-8?q?=EC=A0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/ConfigurationPropertiesConfig.java | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 pennyway-infra/src/main/java/kr/co/pennyway/infra/config/ConfigurationPropertiesConfig.java diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/ConfigurationPropertiesConfig.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/ConfigurationPropertiesConfig.java deleted file mode 100644 index 5e4fc92cf..000000000 --- a/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/ConfigurationPropertiesConfig.java +++ /dev/null @@ -1,18 +0,0 @@ -package kr.co.pennyway.infra.config; - -import kr.co.pennyway.infra.common.properties.AppleOidcProperties; -import kr.co.pennyway.infra.common.properties.GoogleOidcProperties; -import kr.co.pennyway.infra.common.properties.KakaoOidcProperties; -import kr.co.pennyway.infra.common.properties.ServerProperties; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -@EnableConfigurationProperties({ - ServerProperties.class, - AppleOidcProperties.class, - GoogleOidcProperties.class, - KakaoOidcProperties.class -}) -@Configuration -public class ConfigurationPropertiesConfig { -} From 6b5cb052591462d57bb577addfced59910931065 Mon Sep 17 00:00:00 2001 From: JaeSeo Yang <96044622+psychology50@users.noreply.github.com> Date: Tue, 2 Apr 2024 13:06:48 +0900 Subject: [PATCH 16/27] =?UTF-8?q?feat:=20provider=20=EB=B3=84=20feign=20in?= =?UTF-8?q?terface=20=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/apple/oidc/AppleOidcClient.java | 22 +++++++++++++++++++ .../client/google/oidc/GoogleOidcClient.java | 22 +++++++++++++++++++ .../client/kakao/oidc/KakaoOidcClient.java | 21 ++++++++++++++++++ 3 files changed, 65 insertions(+) create mode 100644 pennyway-infra/src/main/java/kr/co/pennyway/infra/client/apple/oidc/AppleOidcClient.java create mode 100644 pennyway-infra/src/main/java/kr/co/pennyway/infra/client/google/oidc/GoogleOidcClient.java create mode 100644 pennyway-infra/src/main/java/kr/co/pennyway/infra/client/kakao/oidc/KakaoOidcClient.java diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/client/apple/oidc/AppleOidcClient.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/client/apple/oidc/AppleOidcClient.java new file mode 100644 index 000000000..6c7078132 --- /dev/null +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/client/apple/oidc/AppleOidcClient.java @@ -0,0 +1,22 @@ +package kr.co.pennyway.infra.client.apple.oidc; + +import kr.co.pennyway.infra.common.oidc.OauthOidcClient; +import kr.co.pennyway.infra.common.oidc.OidcPublicKeyResponse; +import kr.co.pennyway.infra.config.DefaultFeignConfig; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; + +@FeignClient( + name = "AppleOauthClient", + url = "${oauth2.client.provider.apple.jwks-uri}", + configuration = DefaultFeignConfig.class, + qualifiers = "appleOauthClient", + primary = false +) +public interface AppleOidcClient extends OauthOidcClient { + @Override + @Cacheable(value = "AppleOauth", cacheManager = "oidcCacheManager") + @GetMapping("/auth/keys") + OidcPublicKeyResponse getOIDCPublicKey(); +} diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/client/google/oidc/GoogleOidcClient.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/client/google/oidc/GoogleOidcClient.java new file mode 100644 index 000000000..297fdea98 --- /dev/null +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/client/google/oidc/GoogleOidcClient.java @@ -0,0 +1,22 @@ +package kr.co.pennyway.infra.client.google.oidc; + +import kr.co.pennyway.infra.common.oidc.OauthOidcClient; +import kr.co.pennyway.infra.common.oidc.OidcPublicKeyResponse; +import kr.co.pennyway.infra.config.DefaultFeignConfig; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; + +@FeignClient( + name = "GoogleOauthClient", + url = "${oauth2.client.provider.google.jwks-uri}", + configuration = DefaultFeignConfig.class, + qualifiers = "googleOauthClient", + primary = false +) +public interface GoogleOidcClient extends OauthOidcClient { + @Override + @Cacheable(value = "GoogleOauth", cacheManager = "oidcCacheManager") + @GetMapping("/oauth2/v3/certs") + OidcPublicKeyResponse getOIDCPublicKey(); +} diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/client/kakao/oidc/KakaoOidcClient.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/client/kakao/oidc/KakaoOidcClient.java new file mode 100644 index 000000000..b9603d3bd --- /dev/null +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/client/kakao/oidc/KakaoOidcClient.java @@ -0,0 +1,21 @@ +package kr.co.pennyway.infra.client.kakao.oidc; + +import kr.co.pennyway.infra.common.oidc.OauthOidcClient; +import kr.co.pennyway.infra.common.oidc.OidcPublicKeyResponse; +import kr.co.pennyway.infra.config.DefaultFeignConfig; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; + +@FeignClient( + name = "KakaoOauthClient", + url = "${oauth2.client.provider.kakao.jwks-uri}", + configuration = DefaultFeignConfig.class, + qualifiers = "kakaoOauthClient" +) +public interface KakaoOidcClient extends OauthOidcClient { + @Override + @Cacheable(value = "KakaoOauth", cacheManager = "oidcCacheManager") + @GetMapping("/.well-known/jwks.json") + OidcPublicKeyResponse getOIDCPublicKey(); +} From a123b5c29cbaa778485ebd99ca791dc5066a8d20 Mon Sep 17 00:00:00 2001 From: JaeSeo Yang <96044622+psychology50@users.noreply.github.com> Date: Tue, 2 Apr 2024 15:10:57 +0900 Subject: [PATCH 17/27] =?UTF-8?q?chore:=20infra=20application=20=ED=8C=A8?= =?UTF-8?q?=ED=82=A4=EC=A7=80=20=EA=B2=BD=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/kr/co/pennyway/PennywayInfraApplication.java | 5 ----- .../kr/co/pennyway/infra/PennywayInfraApplication.java | 8 ++++++++ 2 files changed, 8 insertions(+), 5 deletions(-) delete mode 100644 pennyway-infra/src/main/java/kr/co/pennyway/PennywayInfraApplication.java create mode 100644 pennyway-infra/src/main/java/kr/co/pennyway/infra/PennywayInfraApplication.java diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/PennywayInfraApplication.java b/pennyway-infra/src/main/java/kr/co/pennyway/PennywayInfraApplication.java deleted file mode 100644 index 0bc66b4bb..000000000 --- a/pennyway-infra/src/main/java/kr/co/pennyway/PennywayInfraApplication.java +++ /dev/null @@ -1,5 +0,0 @@ -package kr.co.pennyway; - -public class PennywayInfraApplication { - -} diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/PennywayInfraApplication.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/PennywayInfraApplication.java new file mode 100644 index 000000000..b4f57535d --- /dev/null +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/PennywayInfraApplication.java @@ -0,0 +1,8 @@ +package kr.co.pennyway.infra; + +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class PennywayInfraApplication { + +} From ba5243deec49478ff24907a0bd03d68c415f75a8 Mon Sep 17 00:00:00 2001 From: JaeSeo Yang <96044622+psychology50@users.noreply.github.com> Date: Tue, 2 Apr 2024 15:11:31 +0900 Subject: [PATCH 18/27] =?UTF-8?q?chore:=20cache=20config=20@configuration?= =?UTF-8?q?=20=EC=96=B4=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20=EC=9E=AC?= =?UTF-8?q?=EC=82=BD=EC=9E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/kr/co/pennyway/infra/config/CacheConfig.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/CacheConfig.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/CacheConfig.java index 8646b42e2..7749806c2 100644 --- a/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/CacheConfig.java +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/CacheConfig.java @@ -8,6 +8,7 @@ import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.data.redis.cache.CacheKeyPrefix; import org.springframework.data.redis.cache.RedisCacheConfiguration; @@ -23,6 +24,7 @@ import java.time.Duration; import java.util.Map; +@Configuration @EnableCaching public class CacheConfig implements PennywayInfraConfig { private final String host; From 3e2559693a2cd6602aa56d5716cecddfd8bbf223 Mon Sep 17 00:00:00 2001 From: JaeSeo Yang <96044622+psychology50@users.noreply.github.com> Date: Tue, 2 Apr 2024 15:12:17 +0900 Subject: [PATCH 19/27] =?UTF-8?q?chore:=20infra=20config=20->=20api=20?= =?UTF-8?q?=EB=AA=A8=EB=93=88=EC=97=90=EC=84=9C=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=ED=95=A0=20infra=20=EB=AA=A8=EB=93=88=EC=9D=98=20properties=20?= =?UTF-8?q?=EB=AA=85=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kr/co/pennyway/api/config/InfraConfig.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 pennyway-app-external-api/src/main/java/kr/co/pennyway/api/config/InfraConfig.java diff --git a/pennyway-app-external-api/src/main/java/kr/co/pennyway/api/config/InfraConfig.java b/pennyway-app-external-api/src/main/java/kr/co/pennyway/api/config/InfraConfig.java new file mode 100644 index 000000000..e62ecea67 --- /dev/null +++ b/pennyway-app-external-api/src/main/java/kr/co/pennyway/api/config/InfraConfig.java @@ -0,0 +1,18 @@ +package kr.co.pennyway.api.config; + +import kr.co.pennyway.infra.common.properties.AppleOidcProperties; +import kr.co.pennyway.infra.common.properties.GoogleOidcProperties; +import kr.co.pennyway.infra.common.properties.KakaoOidcProperties; +import kr.co.pennyway.infra.common.properties.ServerProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Configuration +@EnableConfigurationProperties({ + ServerProperties.class, + AppleOidcProperties.class, + GoogleOidcProperties.class, + KakaoOidcProperties.class +}) +public class InfraConfig { +} From 5326067b1f7145decce6dc4b481f0c6e1ed47468 Mon Sep 17 00:00:00 2001 From: JaeSeo Yang <96044622+psychology50@users.noreply.github.com> Date: Tue, 2 Apr 2024 15:23:49 +0900 Subject: [PATCH 20/27] =?UTF-8?q?feat:=20infra=20config=20maker=20?= =?UTF-8?q?=EC=9D=B8=ED=84=B0=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EB=B0=8F=20?= =?UTF-8?q?=EC=97=B4=EA=B1=B0=20=ED=83=80=EC=9E=85=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../infra/common/importer/PennywayInfraConfig.java | 7 +++++++ .../common/importer/PennywayInfraConfigGroup.java | 12 ++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 pennyway-infra/src/main/java/kr/co/pennyway/infra/common/importer/PennywayInfraConfig.java create mode 100644 pennyway-infra/src/main/java/kr/co/pennyway/infra/common/importer/PennywayInfraConfigGroup.java diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/importer/PennywayInfraConfig.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/importer/PennywayInfraConfig.java new file mode 100644 index 000000000..8a7398e5a --- /dev/null +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/importer/PennywayInfraConfig.java @@ -0,0 +1,7 @@ +package kr.co.pennyway.infra.common.importer; + +/** + * Pennyway Infra의 Configurations를 나타내는 Marker Interface + */ +public interface PennywayInfraConfig { +} diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/importer/PennywayInfraConfigGroup.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/importer/PennywayInfraConfigGroup.java new file mode 100644 index 000000000..44cd79d98 --- /dev/null +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/importer/PennywayInfraConfigGroup.java @@ -0,0 +1,12 @@ +package kr.co.pennyway.infra.common.importer; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum PennywayInfraConfigGroup { + ; + + private final Class configClass; +} From 0d94f92d70e0aeb7d1270696acc3c6b05cd49d78 Mon Sep 17 00:00:00 2001 From: JaeSeo Yang <96044622+psychology50@users.noreply.github.com> Date: Tue, 2 Apr 2024 15:24:35 +0900 Subject: [PATCH 21/27] =?UTF-8?q?feat:=20infra=20=EB=AA=A8=EB=93=88=20conf?= =?UTF-8?q?g=20import=20selector=20=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PennywayInfraConfigImportSelector.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 pennyway-infra/src/main/java/kr/co/pennyway/infra/common/importer/PennywayInfraConfigImportSelector.java diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/importer/PennywayInfraConfigImportSelector.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/importer/PennywayInfraConfigImportSelector.java new file mode 100644 index 000000000..05e9cc0cb --- /dev/null +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/importer/PennywayInfraConfigImportSelector.java @@ -0,0 +1,25 @@ +package kr.co.pennyway.infra.common.importer; + +import kr.co.pennyway.common.util.MapUtils; +import org.jetbrains.annotations.NotNull; +import org.springframework.context.annotation.DeferredImportSelector; +import org.springframework.core.type.AnnotationMetadata; +import org.springframework.lang.NonNull; + +import java.util.Arrays; +import java.util.Map; + +public class PennywayInfraConfigImportSelector implements DeferredImportSelector { + @NotNull + @Override + public String[] selectImports(@NonNull AnnotationMetadata metadata) { + return Arrays.stream(getGroups(metadata)) + .map(v -> v.getConfigClass().getName()) + .toArray(String[]::new); + } + + private PennywayInfraConfigGroup[] getGroups(AnnotationMetadata metadata) { + Map attributes = metadata.getAnnotationAttributes(EnablePennywayInfraConfig.class.getName()); + return (PennywayInfraConfigGroup[]) MapUtils.getObject(attributes, "value", new PennywayInfraConfigGroup[]{}); + } +} From 9313ba0620576d59521db28fa5892fb7d4b05992 Mon Sep 17 00:00:00 2001 From: JaeSeo Yang <96044622+psychology50@users.noreply.github.com> Date: Tue, 2 Apr 2024 15:25:38 +0900 Subject: [PATCH 22/27] =?UTF-8?q?feat:=20infra=EB=A5=BC=20=EC=9D=98?= =?UTF-8?q?=EC=A1=B4=ED=95=98=EB=8A=94=20=EB=AA=A8=EB=93=88=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EB=8F=99=EC=A0=81=EC=9C=BC=EB=A1=9C=20=EC=9D=B8?= =?UTF-8?q?=ED=94=84=EB=9D=BC=20=EA=B5=AC=EC=84=B1=EC=9D=84=20=EB=AA=85?= =?UTF-8?q?=EC=8B=9C=EC=A0=81=EC=9C=BC=EB=A1=9C=20=EC=84=A0=ED=83=9D?= =?UTF-8?q?=ED=95=98=EA=B8=B0=20=EC=9C=84=ED=95=9C=20=EC=96=B4=EB=85=B8?= =?UTF-8?q?=ED=85=8C=EC=9D=B4=EC=85=98=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../importer/EnablePennywayInfraConfig.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 pennyway-infra/src/main/java/kr/co/pennyway/infra/common/importer/EnablePennywayInfraConfig.java diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/importer/EnablePennywayInfraConfig.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/importer/EnablePennywayInfraConfig.java new file mode 100644 index 000000000..ce58cee3f --- /dev/null +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/importer/EnablePennywayInfraConfig.java @@ -0,0 +1,15 @@ +package kr.co.pennyway.infra.common.importer; + +import org.springframework.context.annotation.Import; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Import(PennywayInfraConfigImportSelector.class) +public @interface EnablePennywayInfraConfig { + PennywayInfraConfigGroup[] value(); +} From 49d18f85a063015a9d6e3bc2107b1badd8ef3e8b Mon Sep 17 00:00:00 2001 From: JaeSeo Yang <96044622+psychology50@users.noreply.github.com> Date: Tue, 2 Apr 2024 15:26:05 +0900 Subject: [PATCH 23/27] =?UTF-8?q?feat:=20oidc=20=EB=8F=84=EC=9A=B0?= =?UTF-8?q?=EB=AF=B8=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/apis/auth/helper/OauthOidcHelper.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 pennyway-app-external-api/src/main/java/kr/co/pennyway/api/apis/auth/helper/OauthOidcHelper.java diff --git a/pennyway-app-external-api/src/main/java/kr/co/pennyway/api/apis/auth/helper/OauthOidcHelper.java b/pennyway-app-external-api/src/main/java/kr/co/pennyway/api/apis/auth/helper/OauthOidcHelper.java new file mode 100644 index 000000000..9ed00f006 --- /dev/null +++ b/pennyway-app-external-api/src/main/java/kr/co/pennyway/api/apis/auth/helper/OauthOidcHelper.java @@ -0,0 +1,41 @@ +package kr.co.pennyway.api.apis.auth.helper; + +import kr.co.pennyway.common.annotation.Helper; +import kr.co.pennyway.infra.common.oidc.OauthOidcProvider; +import kr.co.pennyway.infra.common.oidc.OidcDecodePayload; +import kr.co.pennyway.infra.common.oidc.OidcPublicKey; +import kr.co.pennyway.infra.common.oidc.OidcPublicKeyResponse; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Helper +@RequiredArgsConstructor +@Slf4j +public class OauthOidcHelper { + private final OauthOidcProvider oauthOIDCProvider; + + /** + * ID Token의 payload를 추출하는 메서드
+ * OAuth 2.0 spec에 따라 ID Token의 유효성 검사 수행
+ * + * @param token : idToken + * @param iss : ID Token을 발급한 provider의 URL + * @param aud : ID Token이 발급된 앱의 앱 키 + * @param nonce : 인증 서버 로그인 요청 시 전달한 임의의 문자열 + * @param response : 공개키 목록 + * @return OIDCDecodePayload : ID Token의 payload + */ + public OidcDecodePayload getPayloadFromIdToken(String token, String iss, String aud, String nonce, OidcPublicKeyResponse response) { + String kid = getKidFromUnsignedIdToken(token, iss, aud, nonce); + + OidcPublicKey key = response.getKeys().stream() + .filter(k -> k.kid().equals(kid)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("No matching key found")); + return oauthOIDCProvider.getOIDCTokenBody(token, key.n(), key.e()); + } + + private String getKidFromUnsignedIdToken(String token, String iss, String aud, String nonce) { + return oauthOIDCProvider.getKidFromUnsignedTokenHeader(token, iss, aud, nonce); + } +} From a18e5b979c57e9461e67061deded0750d23ee671 Mon Sep 17 00:00:00 2001 From: JaeSeo Yang <96044622+psychology50@users.noreply.github.com> Date: Tue, 2 Apr 2024 21:28:22 +0900 Subject: [PATCH 24/27] =?UTF-8?q?fix:=20cache=20config=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EB=A7=88=EC=BB=A4=20=EC=9D=B8=ED=84=B0?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EA=B5=AC=ED=98=84=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/kr/co/pennyway/infra/config/CacheConfig.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/CacheConfig.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/CacheConfig.java index 7749806c2..6e140e378 100644 --- a/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/CacheConfig.java +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/CacheConfig.java @@ -3,12 +3,10 @@ import kr.co.pennyway.infra.common.annotation.InfraRedisConnectionFactory; import kr.co.pennyway.infra.common.annotation.OidcCacheManager; import kr.co.pennyway.infra.common.annotation.SecurityUserCacheManager; -import kr.co.pennyway.infra.common.importer.PennywayInfraConfig; import org.springframework.beans.factory.annotation.Value; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.data.redis.cache.CacheKeyPrefix; import org.springframework.data.redis.cache.RedisCacheConfiguration; @@ -24,9 +22,9 @@ import java.time.Duration; import java.util.Map; -@Configuration + @EnableCaching -public class CacheConfig implements PennywayInfraConfig { +public class CacheConfig { private final String host; private final int port; private final String password; From 3fda716909675524ee220c20660c98dccb28e6dc Mon Sep 17 00:00:00 2001 From: JaeSeo Yang <96044622+psychology50@users.noreply.github.com> Date: Wed, 3 Apr 2024 00:30:35 +0900 Subject: [PATCH 25/27] =?UTF-8?q?fix:=20client-secret=20->=20secret=20?= =?UTF-8?q?=ED=95=84=EB=93=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pennyway/infra/common/oidc/OauthOidcClientProperties.java | 2 +- .../pennyway/infra/common/properties/AppleOidcProperties.java | 2 +- .../pennyway/infra/common/properties/GoogleOidcProperties.java | 2 +- .../pennyway/infra/common/properties/KakaoOidcProperties.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOidcClientProperties.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOidcClientProperties.java index f19495fd7..8b03875a6 100644 --- a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOidcClientProperties.java +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/oidc/OauthOidcClientProperties.java @@ -3,5 +3,5 @@ public interface OauthOidcClientProperties { String getJwksUri(); - String getClientSecret(); + String getSecret(); } diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/AppleOidcProperties.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/AppleOidcProperties.java index 0e7ea2e16..d953b2285 100644 --- a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/AppleOidcProperties.java +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/AppleOidcProperties.java @@ -10,5 +10,5 @@ @ConfigurationProperties(prefix = "oauth2.client.provider.apple") public class AppleOidcProperties implements OauthOidcClientProperties { private final String jwksUri; - private final String clientSecret; + private final String secret; } diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/GoogleOidcProperties.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/GoogleOidcProperties.java index da3d68262..b61e61078 100644 --- a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/GoogleOidcProperties.java +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/GoogleOidcProperties.java @@ -10,5 +10,5 @@ @ConfigurationProperties(prefix = "oauth2.client.provider.google") public class GoogleOidcProperties implements OauthOidcClientProperties { private final String jwksUri; - private final String clientSecret; + private final String secret; } diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/KakaoOidcProperties.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/KakaoOidcProperties.java index 4c0bcf18c..e7d3f90a2 100644 --- a/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/KakaoOidcProperties.java +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/common/properties/KakaoOidcProperties.java @@ -10,5 +10,5 @@ @ConfigurationProperties(prefix = "oauth2.client.provider.kakao") public class KakaoOidcProperties implements OauthOidcClientProperties { private final String jwksUri; - private final String clientSecret; + private final String secret; } From 01ecafb04c22103e8b8a1b840c44c30a492abace Mon Sep 17 00:00:00 2001 From: JaeSeo Yang <96044622+psychology50@users.noreply.github.com> Date: Wed, 3 Apr 2024 00:37:49 +0900 Subject: [PATCH 26/27] =?UTF-8?q?chore:=20feign=20config=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pennyway/infra/config/DefaultFeignConfig.java | 6 ++++++ .../kr/co/pennyway/infra/config/FeignConfig.java | 13 +++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 pennyway-infra/src/main/java/kr/co/pennyway/infra/config/FeignConfig.java diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/DefaultFeignConfig.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/DefaultFeignConfig.java index 4bddc7644..07ee11df4 100644 --- a/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/DefaultFeignConfig.java +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/DefaultFeignConfig.java @@ -2,9 +2,15 @@ import feign.codec.Encoder; import feign.form.FormEncoder; +import feign.okhttp.OkHttpClient; import org.springframework.context.annotation.Bean; public class DefaultFeignConfig { + @Bean + public OkHttpClient client() { + return new OkHttpClient(); + } + @Bean Encoder formEncoder() { return new FormEncoder(); diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/FeignConfig.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/FeignConfig.java new file mode 100644 index 000000000..564fd5057 --- /dev/null +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/FeignConfig.java @@ -0,0 +1,13 @@ +package kr.co.pennyway.infra.config; + +import org.springframework.boot.autoconfigure.ImportAutoConfiguration; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.cloud.openfeign.FeignAutoConfiguration; +import org.springframework.cloud.openfeign.clientconfig.HttpClient5FeignConfiguration; +import org.springframework.context.annotation.Configuration; + +@Configuration +@EnableFeignClients(basePackages = "kr.co.pennyway.infra") +@ImportAutoConfiguration({FeignAutoConfiguration.class, HttpClient5FeignConfiguration.class}) +public class FeignConfig { +} From 0a5c60d00bb2c89bf0f694c4deaebed0255ae54e Mon Sep 17 00:00:00 2001 From: JaeSeo Yang <96044622+psychology50@users.noreply.github.com> Date: Wed, 3 Apr 2024 00:55:30 +0900 Subject: [PATCH 27/27] =?UTF-8?q?fix:=20cache=20config=20@configuration=20?= =?UTF-8?q?=EC=96=B4=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20=EB=B3=B5?= =?UTF-8?q?=EA=B5=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/kr/co/pennyway/infra/config/CacheConfig.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/CacheConfig.java b/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/CacheConfig.java index 6e140e378..a84c56992 100644 --- a/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/CacheConfig.java +++ b/pennyway-infra/src/main/java/kr/co/pennyway/infra/config/CacheConfig.java @@ -7,6 +7,7 @@ import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.data.redis.cache.CacheKeyPrefix; import org.springframework.data.redis.cache.RedisCacheConfiguration; @@ -22,7 +23,7 @@ import java.time.Duration; import java.util.Map; - +@Configuration @EnableCaching public class CacheConfig { private final String host;