본문 바로가기
C#/Program

네이버 Open API 이용하여 로그인 및 접근 토큰 / 인증 코드 / 상태 코드 구하기

by HyunS_ 2019. 6. 9.

네이버 Open API 이용하여 로그인 및 접근 토큰 / 인증코드 / 상태 코드 구하기 입니다.

 

 

using System;
using System.Collections.Specialized;
using System.IO;
using System.Net;
using System.Web;
using System.Windows.Forms;

namespace NaverLogin
{
    /// <summary>
    /// 메인폼 클래스 입니다.
    /// </summary>
    public partial class MainForm : Form
    {
        #region MainForm() - 생성자 입니다.

        /// <summary>
        /// 생성자 입니다.
        /// </summary>
        public MainForm()
        {
            InitializeComponent();

            #region 이벤트를 설정합니다.

            this.naverLoginButton.Click         += naverLoginButton_Click;
            this.callBackButton.Click           += callBackButton_Click;
            this.accessTokenRequestButton.Click += accessTokenRequestButton_Click;
            this.accessTokenDeleteButton.Click  += accessTokenDeleteButton_Click;

            #endregion
        }

        #endregion

        // Event Method (Private)

        #region naverLoginButton_Click() - 버튼 클릭시 동작합니다.

        /// <summary>
        /// 버튼 클릭시 동작합니다.
        /// </summary>
        /// <param name="sender">이벤트 발생자 입니다.</param>
        /// <param name="e">이벤트 인자 입니다.</param>
        private void naverLoginButton_Click(object sender, EventArgs e)
        {
            string clientID    = "클라이언트 아이디";
            string redirectURL = "등록한 리다이렉트 주소";

            string state       = (new Random()).Next().ToString();

            NameValueCollection listAuthURL_QueryString = HttpUtility.ParseQueryString(string.Empty);

            listAuthURL_QueryString["response_type"] = "code";
            listAuthURL_QueryString["client_id"    ] = clientID;
            listAuthURL_QueryString["redirect_uri" ] = redirectURL;
            listAuthURL_QueryString["state"        ] = state;

            string autoURL = "https://nid.naver.com/oauth2.0/authorize?" + listAuthURL_QueryString.ToString();

            this.naverLoginWebBrowser.Navigate(new Uri(autoURL));
        }

        #endregion
        #region callBackButton_Click() - 버튼 클릭시 동작합니다.

        /// <summary>
        /// 버튼 클릭시 동작합니다.
        /// </summary>
        /// <param name="sender">이벤트 발생자 입니다.</param>
        /// <param name="e">이벤트 인자 입니다.</param>
        private void callBackButton_Click(object sender, EventArgs e)
        {
            NameValueCollection query = HttpUtility.ParseQueryString(this.naverLoginWebBrowser.Url.Query);

            this.resultRichTextBox.Text += "콜백 URL 인증 정보 : " + query.ToString() + Environment.NewLine;
        }

        #endregion
        #region accessTokenRequestButton_Click() - 버튼 클릭시 동작합니다.

        /// <summary>
        /// 버튼 클릭시 동작합니다.
        /// </summary>
        /// <param name="sender">이벤트 발생자 입니다.</param>
        /// <param name="e">이벤트 인자 입니다.</param>
        private void accessTokenRequestButton_Click(object sender, EventArgs e)
        {
            string clientID     = "클라이언트 아이디";
            string clientSecret = "Client Secret 입니다.";
            string authCode     = this.authCodeTextBox.Text;
            string authState    = this.authStateCodeTextBox.Text;

            WebClient webClient;

            string accessToken_URL = "https://nid.naver.com/oauth2.0/token";

            webClient = new WebClient();

            webClient.QueryString.Add("grant_type"   , "authorization_code");
            webClient.QueryString.Add("client_id"    , clientID            );
            webClient.QueryString.Add("client_secret", clientSecret        );
            webClient.QueryString.Add("code"         , authCode            );
            webClient.QueryString.Add("state"        , authState           );

            Stream stream = webClient.OpenRead(accessToken_URL);

            string resultJson = new StreamReader(stream).ReadToEnd();

            this.resultRichTextBox.Text += "접속 토큰 요청 결과 : " + Environment.NewLine;
            this.resultRichTextBox.Text += resultJson + Environment.NewLine;

        }

        #endregion

        #region accessTokenDeleteButton_Click() - 버튼 클릭시 동작합니다.

        /// <summary>
        /// 버튼 클릭시 동작합니다.
        /// </summary>
        /// <param name="sender">이벤트 발생자 입니다.</param>
        /// <param name="e">이벤트 인자 입니다.</param>
        private void accessTokenDeleteButton_Click(object sender, EventArgs e)
        {
            string clientID        = "클라이언트 아이디";
            string clientSecret    = "Client Secret 입니다.";
            string accessToken     = this.accessCodeTextBox.Text;
            string serviceProvider = "NAVER";

            WebClient webClient;

            string accessToken_URL = "https://nid.naver.com/oauth2.0/token";

            webClient = new WebClient();

            webClient.QueryString.Add("grant_type"      , "delete"       );
            webClient.QueryString.Add("client_id"       , clientID       );
            webClient.QueryString.Add("client_secret"   , clientSecret   );
            webClient.QueryString.Add("access_token"    , accessToken    );
            webClient.QueryString.Add("service_provider", serviceProvider);

            Stream stream = webClient.OpenRead(accessToken_URL);

            string resultJson = new StreamReader(stream).ReadToEnd();

            this.resultRichTextBox.Text += "접속 토큰 삭제 결과 : " + resultJson + Environment.NewLine;
        }

        #endregion

    }
}
728x90

댓글