네이버 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
'C# > Program' 카테고리의 다른 글
TaskManager 할일 관리 프로그램 입니다. (0) | 2019.11.26 |
---|---|
파일 모니터링 프로그램 입니다. (0) | 2019.10.27 |
Async / Await 테스트하는 간단 예제 프로그램 입니다. (0) | 2019.06.11 |
C# / Winform 으로 만든 CubeTimer 입니다. (0) | 2019.06.02 |
댓글