이 글에서는 OAuth 2.0을 이용 네이버 API와 연동하는 방법을 알아봅니다.

이 글에서는 네이버 아이디로 로그인 후 회원 프로필 조회 API와 연동해 프로필 정보를 불러오는 델파이 애플리케이션을 작성할 수 있습니다.

 

다음 글을 통해 OAuth 2.0을 이용 카카오 API와 연동하는 내용을 다뤘습니다.

 

OAuth2.0 연동하는 절차는 카카오, 네이버 API 뿐아니라 대부분의 서비스들이 비슷합니다.

이 글에서는 카카오 API와 네이버 API의 차이점에 대해서만 간략히 설명합니다. 이글을 읽기 전 위 링크의 내용을 먼저 숙지하시기 바랍니다.

(네이버와 카카오 OAuth 2.0의 차이점은 앱 등록하는 과정, API의 엔드포인트(URI)와 일부 파라미터 종류 및 이름 뿐입니다.)

 

[준비] 준비사항, 앱 등록

네이버 아이디로 로그인 API의 명세는 다음 링크로 확인할 수 있습니다.
 
다음 링크에서 애플리케이션을 등록해야 합니다.
 
등록 후 애플리케이션 정보에서 Client ID와 Client Secret을 확인합니다.(구현 시 사용)

 

API 설정에서 "사용 API" 항목에서 "네아로(네이버 아이디로 로그인)"항목을 선택하고, 제공 정보를 선택합니다.

 

API 설정에서 "로그인 오픈 API 서비스 환경" 항목에서 "PC웹" 환경을 추가하고, 서비스 URL과 Callback URL을 등록합니다.(테스트 시에는 제 OAuth 페이지를 이용해도 좋습니다. http://hjf.pe.kr/oauth)

 

네이버 아이디로 로그인 시 사용하는 API는 다음과 같습니다.

 

[1단계] 로그인 및 인증코드 취득

"네이버 아이디로 로그인 인증 요청" 페이지의 요청 변수는 다음과 같습니다.

 

대부분 카카오 API와 같지만, 새로운 state 값이 있습니다. 해당 값은 사이트 간 요청 위조 공격을 방지하기 위한 값으로, 요청 시 입의의 값을 전달하면 응답시 동일한 값을 반환해 내가 작성한 요청에 대한 응답인지를 확인하기 위한 목적입니다. state는 임의의 값을 사용해도 됩니다. 샘플에서는 "abcdef" 값을 사용했습니다.(랜덤으로 문자열을 생성해서 사용해도 됩니다.)

 

작성된 코드는 다음과 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm3.Button1Click(Sender: TObject);
var
  URL, Param: string;
begin
  URL := 'https://nid.naver.com';
  Param := '/oauth2.0/authorize?response_type=code&client_id={client_id}&redirect_uri={redirect_uri}&state={state}';
  Param := Param.Replace('{client_id}', CLIENT_ID);
  Param := Param.Replace('{redirect_uri}', REDIRECT_URI);
  Param := Param.Replace('{state}', 'abcdef');
 
  WebBrowser1.URL := URL + Param;
  WebBrowser1.Navigate;
end;
 
위 코드를 이용해 실행 후 로그인 및 동의 화면 후 다음과 같은 웹페이지로 리다이렉션 됩니다.
  • http://hjf.pe.kr/oauth/?code=7geMnuaVmQDsDbpoUl&state=abcdef
이동된 페이지 URL에서 code 정보를 취득 후 엑세스 토큰 취득시 사용합니다.
 

[2단계] 엑세스 토큰 취득

엑세스 토큰 취득 API의 요청 변수는 다음과 같습니다.

1단계에서 취득한 code를 포함해 요청합니다.

 

작성된 코드는 다음과 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var
  token: string;
begin
  RESTClient1.BaseURL := 'https://nid.naver.com/';
 
  RESTRequest1.Resource := 'oauth2.0/token';
  RESTRequest1.Method := rmPOST;
  RESTRequest1.Params.Clear;
  RESTRequest1.Params.AddItem('grant_type',     'authorization_code');
  RESTRequest1.Params.AddItem('client_id',      CLIENT_ID);
  RESTRequest1.Params.AddItem('client_secret',  CLIENT_SECRET);
  RESTRequest1.Params.AddItem('code',           Edit1.Text);
  RESTRequest1.Params.AddItem('state',          'abcdef');
 
  RESTRequest1.Execute;
 
  Memo1.Lines.Text := RESTResponse1.Content;
 
  if RESTResponse1.JSONValue.TryGetValue<string>('access_token', token) then
    Edit2.Text := token;
end;</string>

다음과 같은 응답을 받으면, 필요한 access_token을 가져옵니다.

 

[3단계] 서비스에 접근(엑세스 토큰 이용)

엑세스 토큰으로 다양한 네이버 API에 접근할 수 있습니다.(단, 애플리케이션 등록 시 설정한 앱에 한함)

 
네이버 회원 프로필 조회 API는 다음과 같습니다.

 

정상적인 요청에 대한 응답은 다음과 같습니다.

 

작성된 코드는 다음과 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
procedure TForm3.Button3Click(Sender: TObject);
var
  nickname, name, profile_url: string;
  Stream: TMemoryStream;
begin
  OAuth2Authenticator1.AccessToken := Edit2.Text;
 
  RESTClient2.BaseURL := 'https://openapi.naver.com/';
  RESTClient2.Authenticator := OAuth2Authenticator1;
 
  RESTRequest2.Client := RESTClient2;
  RESTRequest2.Response := RESTResponse2;
 
  RESTRequest2.Resource := 'v1/nid/me';
  RESTRequest2.Execute;
 
  Memo1.Lines.Text := RESTResponse2.Content;
 
  name := RESTResponse2.JSONValue.GetValue<string>('response.name');
  nickname := RESTResponse2.JSONValue.GetValue<string>('response.nickname');
  Edit3.Text := name;
  Edit4.Text := nickname;
 
  profile_url := RESTResponse2.JSONValue.GetValue<string>('response.profile_image');
 
  RESTClient3.BaseURL := profile_url;
  RESTRequest3.Execute;
  RESTRequest3.ExecuteAsync(procedure
    begin
      Stream := TMemoryStream.Create;
      try
        Stream.WriteData(RESTResponse3.RawBytes, RESTResponse3.ContentLength);
        ImageControl1.Bitmap.LoadFromStream(Stream);
      finally
        Stream.Free;
      end;
    end
  );
end;

 

완료 및 테스트

 

완성된 화면의 테스트 결과는 다음과 같습니다.

 

완성된 프로젝트 파일

 NaverOAuth20.zip

 

추가 학습할 내용

이 글은 다음 링크의 OAuth2.0 카카오 API 연동하는 내용과의 차이점을 기술합니다. OAuth 2.0의 프로세스와 카카오 API 연동의 자세한 내용은 다음 링크에서 확인할 수 있습니다.
 
네이버, 카카오 등의 서비스 인증(OAuth 2.0) 및 API 연동은 REST API 기반으로 구현됩니다. 다음 글들을 통해 REST API를 이해하고 실습할 수 있습니다.
 

 

관련/참고 링크


번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 15488
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13974
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 16507
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 22063
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 23282
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 18934
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 39269
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174734
634 이 달의 기술자료 - 2015년 01월 험프리 2014.12.31 3954
633 CEF4Delphi(크로미움 기반 웹브라우저) 컴포넌트 설치 및 실행하기 험프리 2019.01.14 3952
632 [XE8] 근거리 위치기반 서비스를 개발할 수 있는 비콘(Beacon) 연동하기 [1] Humphery 2015.04.15 3943
631 [10.2 도쿄] 델파이로 리눅스 기반 웹서비스 제작하기(WebBroker 이용) [1] file 험프리 2017.03.30 3837
630 데이터스냅에서 제공하는 JSON 포맷 데이터 사용(분석)하기 [1] file Humphery 2015.07.20 3779
629 Help Update 2 (RAD Studio XE4, Delphi XE4, C++Builder XE4) 관리자 2013.07.31 3766
628 [따라하기] 위험지역 경보 시스템 #1 - 위험지역 진입 경보앱 만들기 [1] Humphery 2015.07.30 3749
627 RAD Studio XE5 와 C++Builder XE5, All-Access XE 사용 고객을 위한 Hotfix 1 이 공개되었습니다. 관리자 2013.11.08 3734
626 [무료 세미나] 초대합니다! RAD Studio XE8 출시 세미나!(서울&대구) 관리자 2015.04.08 3708
625 FireMonkey와 VCL 스타일 - 아티클, 블로그, 비디오, 문서, 예제 등 관리자 2014.01.29 3676
624 Hotfix 2 공개: RAD Studio XE5, Delphi XE5, C++Builder XE5 관리자 2013.12.05 3671
623 Hotfix 3: RAD Studio XE5, Delphi XE5 업데이트2 다운로드 관리자 2013.12.27 3670
622 RAD Studio XE6 Webinar 그리고 Developer Direct LIVE! 2014 in Seoul(4/24) Humphery 2014.04.09 3664
621 RAD스튜디오/델파이/C++빌더XE4 HELP 업데이트1 관리자 2013.06.11 3618
620 BaaS(Backend as a Service)와 RAD Studio(GCM, APN, 푸시알림 가능) [4] Humphery 2014.05.29 3572
619 이 달의 기술자료 - 2015년 06월 file 험프리 2015.05.28 3527
618 프로모션 제공 툴 활용 안내 자료 관리자 2013.06.28 3523
617 Help Update 1 : RAD Studio XE5, Delphi XE5, C++Builder XE5 관리자 2013.10.31 3488
616 짐 맥키트(Jim McKeeth) - 델파이가 여러분의 3D모션을 감지합니다.(Kinect 연동) Humphery 2014.04.01 3468
615 데브기어 강의 - 2016년 5월 file 관리자 2015.01.22 3460