κ°μ²΄μ§ν₯μ ν΅μ¬μ΄μ κ½μ νλ ₯, μ±
μ, μν μ΄λ€.
κ°μ²΄μ§ν₯μ κ°μ²΄λ€μ΄ κ°μμ μ±
μμ κ°μ§κ³ λ©μμ§λ₯Ό μ£Όκ³ λ°μΌλ©° νλ ₯ν¨μΌλ‘μ¨ νλμ μ κΈ°μ μΈ μμ€ν
μ μ΄λ£¨λ λ°©μμ΄λ€.
μ΄λ₯Ό μ€λͺ
νκΈ° μν΄ μ±
μμ΄λΌλ κ°λ
μμλΆν° μ΄μΌκΈ°λ₯Ό μμν΄λ³΄μ.
μ±
μμ μ΄λ€ κ°μ²΄ νΉμ μν μ΄ μνν΄μΌ ν μΌμ΄λ μ무λ₯Ό μλ―Ένλ€.
κ°μ²΄μ§ν₯ μ€κ³λ μμ€ν
μ΄ μ 곡ν΄μΌ ν μꡬμ¬νμ μμ€ν
μ μ±
μμΌλ‘ λ°λΌλ³΄λ κ²μμ μΆλ°νλ€.
μλ₯Ό λ€μ΄ ‘μΉν¨μ λ¨Ήλλ€’λΌλ μꡬμ¬νμ΄ μλ€κ³ ν΄λ³΄μ.
μ΄λ₯Ό νλμ κ°μ²΄κ° μλλΌ ‘μ§’μ΄λΌλ μμ€ν
μ΄ κ°μ ΈμΌ ν μ±
μμΌλ‘ λ°λΌλ³Έλ€.
μ΄ μ±
μμ μννκΈ° μν΄ μμ€ν
μ ‘μΉν¨μ λ¨Ήμ΄λΌ’λΌλ λ©μμ§λ₯Ό μ μν μ μλ€.
κ·Έλ λ€λ©΄ μ΄ λ©μμ§λ₯Ό μννκΈ°μ μ ν©ν κ°μ²΄λ 무μμΌκΉ?
λ°λ‘ ‘λ’μ΄λ€.
νμ§λ§ λ΄κ° μΉν¨μ λ¨ΉκΈ° μν΄μλ μ¬λ¬ κ°μ§ νμ μμ
μ΄ νμνλ€.
- μΉν¨μ μν¨λ€
- μΉν¨κ°μ λΈλ€
- μΉν¨μ λ°λλ€
μ΄ μμ μμλ μμ§ κ° μμ
μ λκ° μνν μ§λ μ ν΄μ§μ§ μμλ€.
λ€λ§ μ±
μμ μννκΈ° μν΄ νμν λ©μμ§λ€μ΄ μλ³λμμ λΏμ΄λ€.
μ΄μ κ° λ©μμ§λ₯Ό κ°μ₯ μ μ²λ¦¬ν μ μλ κ°μ²΄ νΉμ μν μ μκ°ν΄λ³Ό μ μλ€.
- μΉν¨μ μν€λ μ±
μ → ν΄λν°
- μΉν¨κ°μ λ΄λ μ±
μ → ν΅μ₯
- μΉν¨μ λ°λ μ±
μ → λ¬Έ
μ΄λ κ² ‘μΉν¨μ λ¨Ήλλ€’λΌλ νλμ ν° μ±
μμ μ¬λ¬ κ°μ μμ μ±
μμΌλ‘ λΆν΄λκ³ ,
κ° μ±
μμ΄ μ μ ν κ°μ²΄(νΉμ μν )μ ν λΉλλ©΄μ κ°μ²΄λ€μ΄ λ©μμ§λ₯Ό ν΅ν΄ μνΈμμ©νλ νλ ₯ κ΄κ³κ° μμ±λλ€.
μ¦, κ°μ²΄μ§ν₯ μ€κ³μμ μ€μν κ²μ νλ ₯μ λ¨Όμ λ μ¬λ¦¬κ³ , κ·Έ νλ ₯μ κ°λ₯νκ² νλ μ±
μκ³Ό μν μ μ¬λ°λ₯΄κ² μ€μ νλ κ²μ΄λ€. μ¬κΈ°μ νλ ₯μ λ¨Όμ λ μ¬λ¦¬λΌλ λ§μ λ§μΉ μμ λ§μ λΆμ νλ κ²μ²λΌ 보μΈλ€. νμ§λ§, μ¬κΈ°μ μ€μν ν¬μΈνΈκ° νλμλ€.
μ€κ³λ₯Ό μμνκΈ° μ , νλ ₯μ ν° κ·Έλ¦Όμ νλ² κ·Έλ €λ³΄λ κ²μ΄λ€.
κ°λ¨ν μμλ‘ μ΄λ₯Ό μ΄ν΄ν΄λ³΄μ.
μμΉ¨μ μΌμ΄λ μΆκ·Ό μ€λΉλ₯Ό νλ€κ³ νλ©΄, κ°μ₯ λ¨Όμ λ μ€λ₯΄λ μκ°μ΄ 무μμΈκ°?
"μΌμ΄λμλ§μ λ°₯ λ¨Ήκ³ μ»κ³ λμ μ· μ
κ³ .."μ κ°μ΄ μμΉ¨ μΆκ·Ό μ€λΉμ νλ¦μ μκ°νκ² λ κ²μ΄λ€.
μ¬κΈ°μ "λλ μΈμ, λ°₯ λ¨ΉκΈ°, μ»κΈ°, μ· μ
κΈ°λ₯Ό ν΄μΌμ§"μ μ²λΌ μ±
μμ λμ΄μ νμ§ μμ κ²μ΄λ€.
μ΄μ²λΌ μμΉ¨ μ€λΉλΌλ ν° μ±
μ μλ 'νλ¦' μ¦, νλ ₯μ λ¨Όμ μκ°νκΈ°μ κ°μ²΄μ§ν₯ μ€κ³ μμ μ±
μμ μ μνκΈ° μ μ, κ·Έ μ±
μμ΄ μ΄λ»κ² λ¬μ±λ μ§μ λν νλ ₯μ νλ¦μ ν° κ·Έλ¦ΌμΌλ‘ κ·Έλ €λ³΄κ³ μμνλ κ²μ΄ μ€μνλ€.
μ¦, μ±
μμ μ€κ³μ κΈ°μ€μ΄κ³ , νλ ₯μ κ·Έ μ±
μμ μ¬λ°λ₯΄κ² λλκΈ° μν μ¬κ³ μ νμ΄λ€.
κ·Έλ λ€λ©΄ μ¬κΈ°μ μν μ 무μμΌκΉ?
μν μ μ°κ·Ήμ λ°°μμ μκ°νλ©΄ μ½λ€.
μ°κ·Ήμμ μ΄λ€ λ°°μμ΄ μμ λ νμ ν λͺ
μ λ°°μ°λ§ λ°°μμ λ§‘μ§λ μλλ€.
μ΄λ€ λ μ A λ°°μ°κ° λ§‘μ μλ μκ³ , μ΄λ€ λ μ B λ°°μ°κ° λ§‘μ μλ μλ€. μ΄μ²λΌ νλ ₯μ΄λΌλ κ΄κ³ μμμ κ°μ μ±
μμ μνν μ μλ€λ©΄ λ°°μ°κ° λꡬλ 'λ°°μ'μ΄λΌλ νλμ μν λ‘ λ³Ό μ μλ€.
λ¨μ§, μ°κ·Ήμ΄λΌλ νλ ₯ μλ μ£Όμ΄μ§ μν μ μ μννκΈ°λ§ νλ©΄ λλ€.
μ΄μ²λΌ μν μ μΆμνλ₯Ό λ§λ€μ΄λ΄λ μ€μν μμμ΄λ€.
μμ μ°κ·Ή μμμμ λ°°μμ΄ μλ A λ°°μ°λ‘ κ³ μ νλ€κ³ ν΄λ³΄μ. λ§μ½, A λ°°μ°κ° μνλ€λ©΄ ν΄λΉ λ°°μ°κ° λμλκΉμ§ μ°κ·Ήμ μ€λ¨ν΄μΌ ν κΉ? νμ€ μΈκ³μμλ κ·Έλ΄μ§λ λͺ¨λ₯΄μ§λ§, λ¨μνκ² μκ°νλ©΄ λ€λ₯Έ λ°°μ°λ₯Ό ν¬μ
νλ©΄ λλ€. ν΄λΉ λ°°μ°κ° λ°°μμ μ μννλ€λ©΄ μ ν λ¬Έμ κ° μλ€.
μ΄μ²λΌ νλμ κ°μ²΄λ‘ 보λ κ²μ μν λ‘μ λ°λΌλ³Έλ€λ©΄, ν΄λΉ μν λ§ μ μννλ κ°μ²΄λ©΄ λκΈ°μ λ³κ²½κ³Ό νμ₯μ μ μ°ν΄μ§λ€. μ¦, μν μ νλ ₯ κ΄κ³μμ κ΅¬μ± μμλ₯Ό μΆμν ν μ μλ€λ κ²μ΄λ€. κ·Έλ κΈ°μ νλ ₯μ κ΄μ μμ μΆμνμ μ΄μ μ μ»μ΄κ° μ μλ€.
νμ§λ§, μ€κ³ μ΄κΈ°μλ μ΄λ¬ν μν μ΄ μ 보μ΄μ§ μμ μ μλ€. κ·Έλ¦¬κ³ νλμ κ°μ²΄λ§ νλ ₯ μμμ μ±
μμ μννλκ² λͺ
νν λλ λΆλͺ
μλ€.
μ΄λ¬ν κ²½μ°μλ ν΄λΉ κ°μ²΄λ₯Ό μν λ‘ λ³΄μλ 무방νλ€. μ¬κΈ°μ μ¬λ°λ μ μ μ±
μμ΄ μν μ κ²°μ νλ€λ μ¬μ€μ΄λ€. κ·Έλ κΈ°μ κ°μ²΄λ μ¬λ¬ μν μ κ°μ§ μ μλ€. λ€λ§, νλμ νλ ₯μ μ°Έμ¬ν κ°μ²΄λ μΈμ λ νλμ μν μ κ°μ§λ€.
κ²°κ΅ κ°μ²΄μ§ν₯ μ€κ³λ, 무μμ ν΄μΌ νλκ°(μ±
μ) λ₯Ό κΈ°μ€μΌλ‘ μ΄λ»κ² ν¨κ» μΌν μ§(νλ ₯) λ₯Ό κ·Έλ €λ³΄κ³ , λκ° κ·Έ μΌμ λ§‘μ μ μλμ§(μν ) λ₯Ό μ μ°νκ² λ°°μΉνλ κ³Όμ μ΄λ€.
μ΄λ° κ΄μ μμ λ¬Έλ νλ‘μ νΈμμ μμ±ν ν ν° κ²μ¦ κ³Όμ μ΄ μκ°λ¬λ€.
public String validateAndGetUserId(SecretKey key) {
try {
Claims claims = Jwts.parser()
.verifyWith(key)
.build()
.parseSignedClaims(accessToken)
.getPayload();
return claims.getSubject();
} catch (JwtException e) {
throw AUTHENTICATION_FAIL.create();
}
}
@Override
public OauthUserInfo verifyAndGetUserInfo(Provider provider, String idToken) {
NimbusOidcIdTokenProcessor processor = processors.get(provider);
if (processor == null) throw new IllegalArgumentException("μ§μνμ§ μλ provider: " + provider);
JWTClaimsSet claims = processor.verifyAndGetClaims(idToken);
String providerId = claims.getSubject();
String email = safeString(claims, "email");
String picture = safeString(claims, "picture");
return new OauthUserInfo(providerId, email, picture);
}
μ§ν μ€μΈ λ νλ‘μ νΈμμ κ°μ Έμ¨ μ½λμΈλ°, μ½κ°μ μ°¨μ΄λ μμ§λ§ 곡ν΅μ μΌλ‘ ν ν°μ κ²μ¦νκ³ , ν ν° λ΄μ μ‘΄μ¬νλ μ μ μ μ 보λ₯Ό κ°μ Έμ¨λ€.
μ¬κΈ°μ ν΄λΉ λ©μλλ μ΄λ‘ μ μΌλ‘ λ κ°μ λ©μμ§λ₯Ό μ²λ¦¬νλ€κ³ λ³Ό μ μμ κ² κ°λ€.
- ν ν°μ κ²μ¦νλΌ
- μ μ μ 보λ₯Ό κ°μ ΈμλΌ
κ·Έλ κΈ°μ λ κ°μ λ©μμ§λ₯Ό νλμ λ©μλκ° λ΄λΉνλ€κ³ λ³Ό μ μλ€. κ·Έλ λ€λ©΄ λ κ°μ λ©μμ§λ‘ λΆλ¦¬νμ¬ κ° λ©μλκ° μ²λ¦¬νλλ‘ λ§λ€λ©΄ μλμ κ°μ μ½λκ° λ κ²μ΄λ€.
public JwtParser validate(SecretKey key) {
try {
return Jwts.parser()
.verifyWith(key)
.build();
} catch (JwtException e) {
throw AUTHENTICATION_FAIL.create();
}
}
public String getUserId(JwtParser parser) {
Claims payload = parser
.parseSignedClaims(accessToken)
.getPayload();
return payload.getSubject();
}
@Override
public JWTClaimsSet verify(Provider provider, String idToken) {
NimbusOidcIdTokenProcessor processor = processors.get(provider);
if (processor == null) throw new IllegalArgumentException("μ§μνμ§ μλ provider: " + provider);
return processor.verifyAndGetClaims(idToken);
}
@Override
public OauthUserInfo getUserInfo(JWTClaimsSet claims) {
String providerId = claims.getSubject();
String email = safeString(claims, "email");
String picture = safeString(claims, "picture");
return new OauthUserInfo(providerId, email, picture);
}
μ΄λ‘ μ μΌλ‘ 보면 ν ν°μ κ²μ¦νλ€μ μ μ μ 보λ₯Ό κ°μ Έμ¨λ€λ μλ‘ λ€λ₯Έ λ©μμ§μ΄λ©°, κ°κ° λ
립λ μ±
μμΌλ‘ λΆλ¦¬ν μ μλ€. κ·Έλ¦¬κ³ μ΄κ² κ°λ
μ μΌλ‘ κΉλν λͺ¨μ΅μΌλ‘ 보μΈλ€.
νμ§λ§ μ€μ νλ ₯μ κ΄μ μμ 보면 μ΄ λ νμλ νμ ν¨κ» μνλλ©°, λΆλ¦¬λ μνλ‘ μ¬μ©λ μ¬μ§κ° κ±°μ μλ€.
μ¦, μ΄ κ²½μ° λ μ±
μμ κ°λ
μ μΌλ‘λ λΆλ¦¬ κ°λ₯νμ§λ§, νλ ₯ μμμλ νλμ μλ―Έ μλ νμ(μΈμ¦)λ‘ λμνλ€.
μ΄λ° μν©μμ λ©μμ§λ₯Ό μΈμμ μΌλ‘ λΆλ¦¬νλ©΄, μ€νλ € verify μ΄ν λ°λμ getUserInfoλ₯Ό νΈμΆν΄μΌ νλ€λ μ묡μ μΈ νλ‘ν μ½μ μ½λ λ°μ λ§₯λ½μ μμ‘΄νκ² λλ€.
μ΄λ νλ ₯μ μ½λλ‘ λλ¬λ΄κΈ°λ³΄λ€, νλ ₯μ κ°λ°μμ κΈ°μ΅κ³Ό ν©μμ λ§‘κΈ°λ μ€κ³κ° λ μ μλ€.
κ·Έλ κΈ°μ κ°μ²΄μ§ν₯μ μ½λμ λ°°μΉλ₯Ό λ°°μ νκ³ μ€κ³ν μ μμΌλ©°, κ²°κ΅ ν΅μ¬μ μ±
μμ μ΄λ»κ² μ€μ νλλμ μλ€.
'κ°λ°' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| μλ°λ‘ GitHub Actions λΌμ΄λΈλ¬λ¦¬ λ§λ€κΈ° (4) | 2026.03.02 |
|---|---|
| κ°λΉμ§ 컬λ ν° (0) | 2026.02.09 |
| μ€λΈμ νΈ 1-2μ₯ μκ° μ 리 λ° DND κ³ λ―Ό (3) | 2026.02.07 |
| λ¨μΌ μΈμ€ν΄μ€μμ EBSκ° μλλ°, S3λ₯Ό μ μ¬μ©ν΄μΌ ν κΉ? (1) | 2026.01.18 |
| MySQLμ κ³΅κ° μΈλ±μ€ (0) | 2025.12.07 |