[java] Java Jersey에서 OAuth 인증을 구현하는 방법은?

OAuth는 웹 응용 프로그램이 사용자의 개인 데이터에 접근하기 위해 다른 서비스 제공 업체의 인증 서비스를 사용하는 인증 프레임워크입니다. Java Jersey에서 OAuth 인증을 구현하는 방법을 알아보겠습니다.

1. 의존성 추가

먼저, pom.xml 파일에 다음 의존성을 추가해야 합니다.

<dependency>
    <groupId>org.glassfish.jersey.ext</groupId>
    <artifactId>jersey-oauth2-client</artifactId>
    <version>2.34</version>
</dependency>

2. OAuth 클라이언트 설정

OAuth 클라이언트를 설정하기 위해 OAuth2ClientSupport 클래스를 사용합니다. 예를 들어, Google OAuth를 사용하려면 다음과 같이 설정할 수 있습니다.

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import org.glassfish.jersey.client.oauth2.OAuth2ClientSupport;

Client client = ClientBuilder.newClient();
String clientId = "YOUR_CLIENT_ID";
String clientSecret = "YOUR_CLIENT_SECRET";
String callbackUri = "YOUR_CALLBACK_URL";
String authorizationUri = "https://accounts.google.com/o/oauth2/v2/auth";
String tokenUri = "https://oauth2.googleapis.com/token";
String scope = "email";

client.register(OAuth2ClientSupport.authorizationCodeGrantFlowBuilder(
        clientId, clientSecret, authorizationUri, tokenUri)
        .callbackUri(callbackUri)
        .scope(scope)
        .build());

3. 인증 플로우 시작

인증 플로우를 시작하기 위해 사용자를 인증 서비스의 로그인 페이지로 리디렉션해야 합니다. 예를 들어, 다음과 같이 Google OAuth를 사용하여 인증 플로우를 시작할 수 있습니다.

Response response = client.target(authorizationUri)
        .queryParam("response_type", "code")
        .request()
        .redirect();
String authorizationCode = response.getLocation().getQueryParameters().getFirst("code");

4. 액세스 토큰 요청

인증 코드를 사용하여 액세스 토큰을 요청해야 합니다. 예를 들어, 다음과 같이 Google OAuth를 사용하여 액세스 토큰을 요청할 수 있습니다.

MultivaluedMap<String, String> formData = new MultivaluedHashMap<>();
formData.add("code", authorizationCode);
formData.add("grant_type", "authorization_code");
formData.add("redirect_uri", callbackUri);

Response response = client.target(tokenUri)
        .request()
        .header("Content-Type", "application/x-www-form-urlencoded")
        .post(Entity.form(formData));

JsonObject json = response.readEntity(JsonObject.class);
String accessToken = json.getString("access_token");
String refreshToken = json.getString("refresh_token");

5. 인증된 요청 보내기

인증된 요청을 보내기 위해 액세스 토큰을 사용해야 합니다. 예를 들어, 다음과 같이 Google OAuth로 인증된 요청을 보낼 수 있습니다.

Response response = client.target("https://www.googleapis.com/userinfo/v2/me")
        .request()
        .header("Authorization", "Bearer " + accessToken)
        .get();

이제 Java Jersey에서 OAuth 인증을 구현하는 방법을 알게 되었습니다. 참고로, 실제 서비스에서는 클라이언트 ID, 클라이언트 비밀키 및 콜백 URL을 정확히 설정해야 합니다.

더 자세한 정보는 Jersey OAuth2 클라이언트 문서를 참조하십시오.