지난 시간에는 OAuth 인증의 개념과 그 동작 방식에 대해 알아보았습니다. 이번 포스트에서는 인기 있는 백엔드 프레임워크인 Spring Boot를 사용하여 OAuth 2.0 인증을 어떻게 구현하는지 알아보도록 하겠습니다.
1. 의존성 추가하기
먼저, 프로젝트에 필요한 의존성을 추가해야 합니다. `pom.xml` 파일에 아래의 내용을 추가합니다.
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
</dependencies>
2. Google에 앱 등록
Google에 앱을 등록하고, 사용자가 구글을 통해 로그인을 하면 우리는 그 토큰을 받아 인증하도록 하겠습니다. 우선 구글Google API Console에서 클라이언트 ID와 클라이언트 시크릿을 생성합니다.
1. [Google Cloud Platform Console](https://console.cloud.google.com/)에 접속
2. 프로젝트 드롭다운 메뉴를 클릭하고, 새 프로젝트를 생성하거나 기존 프로젝트를 선택
3. 좌측 네비게이션 메뉴에서 "APIs & Services > Credentials"를 선택
4. "Create Credentials" 버튼을 클릭하고 "OAuth client ID"를 선택
5. "Application type"에서 애플리케이션 유형(웹 애플리케이션, 안드로이드, 크롬 앱, iOS, TV 및 게임 콘솔 등)을 선택
6. "Authorized JavaScript origins"에는 애플리케이션이 실행 중인 서버의 도메인을, "Authorized redirect URIs"에는 OAuth 인증 후에 사용자가 리다이렉션될 URI를 입력
7. "Create" 버튼을 클릭하여 클라이언트 ID와 클라이언트 시크릿을 생성하세요.
**생성된 클라이언트 ID와 클라이언트 시크릿은 안전한 장소에 보관해야합니다.
3. application.properties 설정하기
다음으로, `application.properties` 파일에 OAuth 인증 설정을 추가해야 합니다. 이 설정은 인증을 위한 클라이언트 ID와 시크릿, 리다이렉트 URI 등을 포함합니다.
spring.security.oauth2.client.registration.google.client-id=your-google-client-id
spring.security.oauth2.client.registration.google.client-secret=your-google-client-secret
spring.security.oauth2.client.registration.google.redirect-uri={baseUrl}/login/oauth2/code/google
`your-google-client-id`와 `your-google-client-secret`에 2에서 생성한 클라이언트 ID와 시크릿을 넣어줍니다.
4. SecurityConfig 설정하기
Spring Security를 설정하기 위해 `SecurityConfig` 클래스를 생성하고, 이를 설정해야 합니다.
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.oauth2Login();
}
}
이 설정을 통해 우리는 모든 요청에 대해 인증을 요구하고, OAuth 2 로그인을 사용하도록 설정합니다.
5. Principal 정보 가져오기
이제 사용자가 로그인하면 인증 정보를 가져올 수 있습니다. 아래는 인증 정보를 가져와 사용자의 이름을 반환하는 컨트롤러 예제입니다.
@RestController
public class UserController {
@GetMapping("/user")
public String getUser(@AuthenticationPrincipal OAuth2User principal) {
return "Hello, " + principal.getAttribute("name");
}
}
이 코드에서 getUser 메서드는 인증된 사용자의 이름을 가져와 "Hello, {사용자 이름}" 형식의 메시지를 반환합니다. 이 때 `@AuthenticationPrincipal` 어노테이션은 Spring Security에서 현재 인증된 사용자를 나타내는 `OAuth2User` 객체를 `principal` 변수로 주입하게 합니다.
이렇게 함으로써 기본적인 OAuth 2.0 인증 구현이 완료되었습니다. 다만, 이 코드는 간단한 예시로, 실제 애플리케이션에서는 보안을 강화하거나 사용자 경험을 개선하기 위한 추가적인 구현이 필요할 수 있습니다.
다음 포스팅에서는 API 게이트웨이의 Rate Limit에 대해 알아보겠습니다.
'엔지니어링' 카테고리의 다른 글
서비스 디스커버리 패턴 (0) | 2023.07.15 |
---|---|
API 게이트웨이 - Rate limit (0) | 2023.07.15 |
API 게이트웨이 - 인증 (0) | 2023.07.15 |
API 게이트웨이 구현 (0) | 2023.07.15 |
API 게이트웨이 패턴 (0) | 2023.07.15 |