최근 Winform을 이용하여 네이버 카페에 자동으로 글을 등록하는 프로그램을 개발하게 되어 기술과 소스를 공유하고자 작성한다.

 

로그인 / 글쓰기 테스트

 

1. 네이버 자동 로그인

네아로(네이버 아이디로 로그인)을 활용하여 자동 로그인을 구현하려 했다.

Winform의 WebBrowser 혹은 ASP.NET MVC or ASP.NET Webform을 활용하여 네이버 로그인을 구현한 경험은 있지만, WebBrowser없이 로그인을 구현하는 경우는 처음이라 많이 삽질을 했다. 구글에 WebBrowser를 띄우지 않고 로그인하는 방법은 많지 않았고, 있다고 하더라고 POST 패킷 분석 로그인 방법이였다.

 

패킷 분석 로그인 방법은 두 곳을 참조 하였다.

[참조]

- http://non-sponsor.tistory.com/6 (네이버 bvsd 로그인)

- https://it-raccoon.tistory.com/15 (위 코드 기반으로 최신업데이트)

 

 

* bvsd : 네이버 로그인시 전송하는 파라미터의 key이다. 위 [참조] 사이트 들에서는 bvsd를 생성하여 로그인하는 방법을 안내하고 있다. 로그인 성공 이후 Cookie를 저장하여 로그인을 유지한다.

 

위 두 코드를 활용하여 bvsd 로그인 시 OAuth 로그인이 되도록 수정하였다.

할땐 골치 아프더니 다 하고 나니 생각보다 간단

 

1-1. 네이버 로그인 OAuth 구현

보통 네이버 로그인 OAuth 가이드에 따라

[네이버 OAuth 로그인 Url] https://nid.naver.com/oauth2.0/authorize?client_id={client_id}&response_type=code&redirect_uri={callback_url}&state={state} 

경로를 브라우저에 띄워 로그인을 유도한다. 하지만, 원하는건 브라우저 혹은 WebBrowser없이 코드로 로그인을 하는것이다.

 

##

추가적으로 response_type=token으로 할 경우와 code로 할 경우 응답 값이 다르다.

둘 다 로그인 구현은 가능하지만 응답값이 다르다.

token의 경우 응답값으로 Access Token을 받을 수 있으며, Refresh Token을 받을 수 없다.

code의 경우 응답값으로 code와 state를 받아 Access Token과 Refresh Token을 발급 받아야 한다.

##

 

HttpWebRequest로 해당 Url에 bvsd와 OAuth 파라미터를 추가하여 로그인 시도를 한다.

* logintp=oauth2, url=https://nid.naver.com/oauth2.0/authorize?client_id={client_id}&response_type=code&redirect_uri={callback_url}&state={state}을 넣어주면된다.

추가적으로, svctype, smart_LEVEL은 PC마다 다르게 나올수도 있다. 해당값을 바꿔줘야 하는지는 잘 모르겠다.

위 이미지의 파란박스가 bvsd이다.

 

소스에서는 위와 같이 작성되어 있다.

 

이렇게 해주면 bvsd를 활용하여 OAuth 로그인을 성공할 수 있다.

이후 작업은 OAuth 로직에 맞춰 진행되며, 위에서 언급한 code와 state로 Access Token과 Refresh Token을 발급 받아 네이버 API 이용할 수 있다.

 

Refesh Token을 저장하여 추후 ID, PW입력없이 API 사용이 가능하다.

 

1-2. 카페 API 사용

소스는 네이버 개발자 카페 글쓰기 명세에서 그대로 가져와서 썼다.

아주 친절하게 잘 작성되어있다.

 

카페 글쓰기 API 사용시 ClubID와 MenuID를 알아야 글을 작성 할 수 있다.

ClubID와 MenuID는 카페 메뉴에서 오른쪽 클릭 후 "새 창에서 열기" or "새 탭에서 열기"를 하면 확인 가능하다.

https://cafe.naver.com/블라블라?iframe_url=/ArticleList.nhn%3Fsearch.clubid=카페아이디%26search.menuid=메뉴아이디%26search.boardtype=L

 

 

textbox에 미리 값을 채워서 사용해주세요. (안그럼 먹통 인건 안비밀)

 

 

// 급하게 해서 소스가 더러워도 이해해주세여ㅠㅠ

NaverCafeTest.zip
0.02MB

'Programming > C#' 카테고리의 다른 글

[C#] 네이버 자동 로그인 / 카페 글쓰기 API  (9) 2019.11.01
[C#]ini file 사용법 & 소스 공유  (3) 2017.01.03
[C#]Log4Net 사용법  (2) 2017.01.03
[C#]Snappy 사용법  (5) 2016.12.30
[C#]DataTable Sorting 간단 사용법  (0) 2016.12.30
  1. 2019.12.30 17:40

    비밀댓글입니다

    • 지금도 잘 되긴 합니다. 다만 보다보니 수정해야하는 부분이 잇더라구요.
      redirect url은 api에 등록된거면 아무거나 상관없습니다. 저는 그냥 카페 주소로 햇어여:)
      code값이 안넘어 오는건 아마도 동의 화면 때문일수 잇을거 같아요. 동의 화면이 나오면 동의 form작성해서 post를 해야 하더라구요 그부분이 빠져잇어요

  2. ㅁㅁ 2019.12.30 19:17

    답변 감사합니다. 말씀하신대로 동의 화면에서 https://nid.naver.com/login/noauth/allow_oauth.nhn 으로 Post 값을 보내려는데 oauth_token은 어디서 얻어 올 수 있을까요? 다른 값들은 그냥 똑같이 보내면 될 듯한데.. 잘못 접근한건지ㅠ

    • oauth token은 자동으로 hidden 필드에 들어가 있습니다 저는 정규표현식으로 걸러서 사용햇어요
      아마 scope도 넣어서 같이 보내야 할거예요 그래야 카페 글쓰기가 가능합니다~

  3. ㅁㅁ 2019.12.30 20:51

    감사합니다. access토큰이랑 refresh토큰의 값은 불러왔습니다. 이제 글쓰기가 문제인데요.. 자꾸 401권한 문제가 나타나는데
    토큰도 문제 없이 받았는데 이런적 있으신가요?

    • api에 카페 권한 있으신거 맞죠??
      해당 계정 내정보 - 보안 설정 에 권한이 들어가 있나 확인 해보셔야 할거 같아요.
      혹은 카페에 글쓰기 권한이 없으실수도 있어요

  4. kaze 2020.02.19 14:30

    혹시.. 더이상 이 코드는 작동이 안되는건가요?
    로그인 시도시 예외 처리하면서 오류를 뿜네요.

    • Favicon of https://akinokaze.tistory.com 방구천사 2020.02.19 14:44 신고

      아래 함수내의
      public async Task<PostReponse> AsyncPostRequest(string Url, NameValueCollection param = null)

      HttpWebResponse webResponse = (HttpWebResponse)await postreq.GetResponseAsync();
      이부분 실행시 예외가 발생합니다.

    • 지금도 잘 되긴 합니다. 다만 보다보니 수정해야하는 부분이 잇더라구요.
      redirect url은 api에 등록된거면 아무거나 상관없습니다. 저는 그냥 카페 주소로 햇어여:)
      code값이 안넘어 오는건 아마도 동의 화면 때문일수 잇을거 같아요. 동의 화면이 나오면 동의 form작성해서 post를 해야 하더라구요 그부분이 빠져잇어요

+ Recent posts