반응형
해당 글에서는 Spring Boot 환경에서 OAuth 2.0 설정을 위해 네이버 로그인 설정 및 구성요소에 대해 알아봅니다.
1) 최초 네이버 개발센터 설정
1. 네이버 개발센터 : NAVER Developers 중 네이버 로그인 API를 접속하여 ‘오픈 API 이용 신청’ 버튼을 누릅니다.
2. 약관 동의를 선택하고 ‘확인’ 버튼을 누릅니다.
3. 휴대폰 인증을 한 뒤, 회사 이름을 작성하고 ‘확인’ 버튼을 누릅니다.
4. 애플리케이션 이름을 작성하고, 사용 API를 ‘네이버 로그인’으로 선택합니다.
5. 로그인에서 수집되는 권한들을 선택합니다.
6. 제공 정보 선택을 하고 서비스 URL, CallBack URL을 입력합니다.
💡제공 정보 선택을 하고 서비스 URL, CallBack URL을 입력합니다.
💡 서비스 URL
- 네이버 로그인을 사용하는 서비스의 주 웹사이트 주소입니다. 사용자가 로그인 후 돌아갈 기본 페이지를 나타냅니다
- ex) 로컬 Node 서버 URL : http://localhost:3000
💡 네이버 로그인 CallBack URL(최대 5개)
- 네이버 로그인 인증이 완료된 후 사용자를 리다이렉턴 할 URL입니다.
- 인증 과정에서 발생한 정보를 받아 처리하는 엔드포인트입니다.
- 최대 5개까지 등록할 수 있어 다양한 시나리오에 대응할 수 있습니다.
ex) API 서버 URL : http://localhost:8080/api/v1/oauth2/naver 엔드포인트로 받아서 이후 후처리를 수행합니다.
7. 아래와 같은 최종 설정을 확인하였습니다.
2) 접속 정보 기반 테스트
1. 내 애플리케이션에서 Client ID와 Client Secret에 대해 확인합니다.
2. API 설정 탭 > 로그인 오픈 API 서비스 환경 중 네이버 로그인 Callback URL을 확인합니다.
3. 위에 정보들을 기반으로 웹 페이지 내에 접속하면 네이버 로그인 접속이 됨을 확인되었습니다.
https://nid.naver.com/oauth2.0/authorize?client_id={CLIENT_ID}&redirect_uri={YOUR_CALLBACK_URL}&response_type=code&state=RANDOM_STATE
# {CLIENT_ID} : 내 애플리케이션 > 개요 > 애플리케이션 정보 > 'Client ID'에서 확인이 가능합니다.
# {REDIRECT_URI} : 내 애플리케이션 > API 설정 > 로그인 오픈 API 서비스 환경 > 네이버 로그인 Callback URL (최대 5개)에서 확인이 가능합니다.
3) application.properties 설정 파일 확인
💡 application.properties 설정 파일 확인
- Spring Boot 크게는 provider, registration로 구분이 되어 있습니다.
- provider의 경우는 OAuth2 인증 제공자에 대한 설정 정보를 포함합니다.
- registration의 경우는 클라이언트 애플리케이션(Spring Boot APP)에 대한 설정을 포함합니다.
spring:
security:
oauth2:
client:
# OAuth2 인증 제공자(네이버)에 대한 설정 정보를 포함합니다.
provider:
naver:
authorization-uri: <https://nid.naver.com/oauth2.0/authorize>
token-uri: <https://nid.naver.com/oauth2.0/token>
user-info-uri: <https://openapi.naver.com/v1/nid/me>
user-name-attribute: id
# 클라이언트 애플리케이션(Spring Boot)에 대한 설정을 포함합니다.
registration:
naver:
client-id: UyfYudFog8G0pfktnq
client-secret: VnYHzwP2PN
redirect-uri:
authorization-grant-type: authorization_code
client-authentication-method: client_secret_post
client-name: naver
scope:
- nickname
- email
- profile_image
1. client.provider 구성
💡client.provider 구성
- OAuth2 인증 제공자에 대한 설정 정보를 포함하는 부분입니다. 여기서는 네이버 로그인을 위한 설정을 정의하고 있습니다.
항목 | 설명 |
authorization-uri | 사용자 인증을 위한 URL입니다. 사용자가 네이버 로그인 페이지로 리다이렉트될 때 이 주소가 사용됩니다. |
token-uri | 액세스 토큰을 발급받기 위한 URL입니다. 인증 코드를 액세스 토큰으로 교환할 때 이 주소로 요청을 보냅니다. |
user-info-uri | 인증된 사용자의 정보를 가져오기 위한 URL입니다. 발급받은 액세스 토큰을 사용하여 이 주소로 사용자 정보를 요청합니다. |
user-name-attribute | 사용자 정보 응답에서 사용자 식별자로 사용할 속성을 지정합니다. 네이버의 경우 'id'로 설정되어 있어, 이 값을 통해 사용자를 구분합니다. |
2. clinet.provider API 가이드
메서드 | 인증 | 요청 URL | 출력 포멧 | 설명 |
GET / POST | OAuth 2.0 | https://nid.naver.com/oauth2.0/authorize | URL 리다이렉트 | 네이버 로그인 인증 요청 |
GET / POST | OAuth 2.0 | https://nid.naver.com/oauth2.0/token | JSON | 접근 토큰 발급/갱신/삭제 요청 |
GET | OAuth 2.0 | https://openapi.naver.com/v1/nid/me | JSON | 네이버 회원 프로필 조회 |
3. client.registration 구성
3.1. registration.naver.client-id, client-secret 값은 애플리케이션 정보 내에서 값을 확인합니다.
항목 | 설명 |
registration.naver.client-id | 네이버 개발자 센터에서 발급받은 애플리케이션의 고유 식별자입니다. OAuth2.0 인증 과정에서 클라이언트를 식별하는 데 사용됩니다. |
registration.naver.client-secret | 네이버 개발자 센터에서 발급받은 애플리케이션의 비밀 키입니다. 클라이언트 인증 과정에서 사용되며, 외부에 노출되지 않도록 주의해야 합니다. |
3.2. registration.naver.redirect-uri 값은 내 애플리케이션 > API 설정 탭 > 네이버 로그인 Callback URL을 활용합니다.
항목 | 설명 |
registration.naver.client-id | 네이버 개발자 센터에서 발급받은 애플리케이션의 고유 식별자입니다. OAuth2.0 인증 과정에서 클라이언트를 식별하는 데 사용됩니다. |
registration.naver.client-secret | 네이버 개발자 센터에서 발급받은 애플리케이션의 비밀 키입니다. 클라이언트 인증 과정에서 사용되며, 외부에 노출되지 않도록 주의해야 합니다. |
registration.naver.redirect-uri | OAuth2.0 인증 과정이 완료된 후 사용자가 리다이렉트될 URL을 지정합니다 |
3.3. authorization-grant-type 값에 대한 설명
💡authorization-grant-type
- OAuth 2.0 프로토콜에서 클라이언트가 액세스 토큰을 얻기 위해 사용하는 방법을 지정합니다. 일반적으로 다음과 같은 값들이 사용됩니다
Grant Type | 설명 |
authorization_code | 사용자가 인증 후 받은 인증 코드를 이용해 액세스 토큰을 요청하는 방식입니다. 가장 일반적으로 사용되는 방식으로, 웹 애플리케이션에서 주로 사용됩니다. |
implicit | 주로 단일 페이지 애플리케이션(SPA)에서 사용되며, 인증 코드 없이 바로 액세스 토큰을 받는 방식입니다. 보안상의 이유로 최근에는 권장되지 않습니다. |
password | 사용자의 아이디와 비밀번호를 직접 사용하여 액세스 토큰을 얻는 방식입니다. 높은 신뢰도가 요구되는 애플리케이션에서만 사용해야 합니다. |
client_credentials | 클라이언트 자체가 리소스 소유자인 경우 사용됩니다. 주로 서버 간 통신에서 사용됩니다. |
refresh_token | 기존 액세스 토큰이 만료되었을 때, 리프레시 토큰을 사용하여 새로운 액세스 토큰을 얻는 방식입니다. |
3.4. client-authentication-method 값은 아래와 같은 값을 가집니다.
💡 client-authentication-method 값은 아래와 같은 값을 가집니다.
- OAuth 2.0 클라이언트가 인증 서버에 자신을 인증하는 방법을 지정합니다
인증 방식 | 설명 |
client_secret_basic | 클라이언트 ID와 시크릿을 Base64로 인코딩하여 Authorization 헤더에 포함시킵니다. |
client_secret_post | 클라이언트 ID와 시크릿을 요청 본문에 포함시킵니다. |
client_secret_jwt | JWT(JSON Web Token)를 사용하여 클라이언트를 인증합니다. |
private_key_jwt | 비공개 키로 서명된 JWT를 사용하여 클라이언트를 인증합니다. |
3.4. registration.naver.scope 값은 선택한 사항에 따라 받을 수 있고, 각각 항목의 이름을 아래와 같습니다.
Scope | 설명 |
name | 회원이름 |
연락처 이메일 주소 | |
nickname | 별명 |
profile_image | 프로필 사진 |
gender | 성별 |
birthday | 생일 |
age | 연령대 |
birthyear | 출생연도 |
mobile | 휴대전화번호 |
오늘도 감사합니다😀
반응형