자바 OAuth 2.0 Client 라이브러리
주요 특징:
- ☕ Modern Java: Java 21 LTS 공식 지원
- 🔒 보안 강화: 최신 의존성 및 보안 패치 적용
- ⚡ HttpClient 5.x: 향상된 성능 및 HTTP/2 지원
- 🎯 간단한 API: 직관적인 OAuth 2.0 플로우 구현
- 🌐 다중 제공자: Naver, Kakao, Google, Facebook 지원
- ✅ 높은 품질: 40% 테스트 커버리지, 정적 분석 통과
📝 OAuth 1.0a는 지원하지 않습니다. 대부분의 플랫폼이 OAuth 2.0으로 전환했습니다.
- ✅ Java 21 LTS로 마이그레이션 완료
- ✅ SpotBugs 4.9.x 업그레이드 (Java 21 호환)
- ✅ Apache HttpClient 5.x 최신 API 적용
- ✅ Jackson PropertyNamingStrategies 최신 API 사용
- ✅ Lombok 의존성 제거 (수동 구현으로 전환)
- ✅ Checkstyle 위반 0개 (1,809개 → 0개)
- ✅ Deprecated API 제거 (HttpClient, Jackson)
- ✅ Unchecked operation 경고 제거
- ✅ SpotBugs UUF_UNUSED_FIELD 경고 제거
- ✅ 테스트 커버리지 18% → 40% (+22%)
- ✅ 총 119개 단위 테스트 (68개 → 119개)
- ✅ 핵심 OAuth 클래스 전체 테스트 커버리지
- ✅ 엣지 케이스 및 에러 처리 테스트 추가
- ✅ OAuth20Constants.REFRESH_TOKEN typo 수정 (
refesh_token→refresh_token)
run
oauth-client <- oauth-storage <- oauth-connector
test
oauth-client <- test-helper <- oauth-connector-*
oauth spec https://tools.ietf.org/html/rfc6749
| Provider | 문서 | 애플리케이션 등록 |
|---|---|---|
| Naver | 개발 가이드 | 내 애플리케이션 |
| Kakao | REST API | 내 애플리케이션 |
| OAuth 2.0 | Cloud Console | |
| 로그인 문서 | 앱 대시보드 |
- Java: 17 이상 (권장: Java 21 LTS)
- Maven: 3.9.x 이상
- Build Tool: Maven 또는 Gradle
<dependency>
<groupId>org.scriptonbasestar.oauth</groupId>
<artifactId>oauth-connector-naver</artifactId>
<version>2.0.0</version>
</dependency>implementation 'org.scriptonbasestar.oauth:oauth-connector-naver:2.0.0'import org.scriptonbasestar.oauth.client.*;
import org.scriptonbasestar.oauth.client.model.*;
import org.scripton.oauth.connector.naver.*;
public class NaverOAuthExample {
public static void main(String[] args) {
// 1. OAuth 설정
OAuth2NaverConfig config = OAuth2NaverConfig.builder()
.clientId("YOUR_CLIENT_ID")
.clientSecret("YOUR_CLIENT_SECRET")
.redirectUri("http://localhost:8080/callback")
.scope("profile,email")
.build();
// 2. 인증 URL 생성
OAuth2NaverGenerateAuthorizeEndpointFunction authFunction =
new OAuth2NaverGenerateAuthorizeEndpointFunction(config);
State state = new RandomStringStateGenerator().generate("NAVER");
String authUrl = authFunction.generate(state);
System.out.println("인증 URL: " + authUrl);
// 3. 사용자 인증 후 받은 code로 액세스 토큰 발급
Verifier code = new Verifier("RECEIVED_CODE_FROM_CALLBACK");
OAuth2NaverAccesstokenFunction tokenFunction =
new OAuth2NaverAccesstokenFunction(config, tokenExtractor, tokenStorage);
OAuth2NaverTokenRes token = tokenFunction.issue(code, state);
System.out.println("Access Token: " + token.getAccessToken());
// 4. 사용자 정보 조회
OAuth2ResourceFunction<String> resourceFunction =
new DefaultOAuth2ResourceFunction(config.getResourceProfileUri());
String userProfile = resourceFunction.run(token.getAccessToken());
System.out.println("User Profile: " + userProfile);
}
}@Configuration
public class OAuth2Config {
@Bean
public OAuth2NaverConfig naverConfig() {
return OAuth2NaverConfig.builder()
.clientId("${oauth.naver.client-id}")
.clientSecret("${oauth.naver.client-secret}")
.redirectUri("${oauth.naver.redirect-uri}")
.scope("profile,email")
.build();
}
@Bean
public OAuth2NaverAccesstokenFunction naverTokenFunction(
OAuth2NaverConfig config,
TokenExtractor<OAuth2NaverTokenRes> tokenExtractor,
TokenStorage tokenStorage) {
return new OAuth2NaverAccesstokenFunction(config, tokenExtractor, tokenStorage);
}
}테스트를 위한 OAuth 설정 파일: ~/.devenv/oauth/NAVER.cfg
client_id=YOUR_CLIENT_ID
client_secret=YOUR_CLIENT_SECRET
redirect_uri=http://localhost:8080/oauth/naver/callback
scope=profile,email
resource_profile_uri=https://openapi.naver.com/v1/nid/me💡 Kakao 참고사항: Kakao는 client_secret이 선택적입니다. Admin Key를 사용하는 경우 추가하세요.