LocalApp - Web(AppBackend) - SNS(OAuth:Facebook,Twitter…) 구조에서 로그인 처리

1 minute read

LocalApp : 스마트폰앱, 데스크탑앱 Browser : 모바일과 데스크탑의 웹브라우저 사용하는 경우 Web : 홈페이지 SNS : OAuth 또는 다른 인증을 제공하는 서비스들 Facebook, Twitter, Google, Naver, Daum …

- Browser - Web - SNS(OAuth) 로그인이라면 흔히 알려진 대로

Brower - Web 사이에는 세션과 쿠키를 이용하고 Web과 SNS사이에는 AccessKey를 사용한다. 로그인시에 일회적으로 인증처리만 한다면 AccessKey를 저장할 필요없이 한번 사용해도 되고 지속적으로 SNS사이트와 데이터 교환을 한다면 AccessKey를 저장소에 보관한다.

- LocalApp - Backend - SNS 의 경우에는 잘못된 방법을 사용하는 경우가  있다.

LocalApp에서 Backend의 데이터에 접근할 때 어떤 방법을 사용해서 인증을 처리해야 할까?

LocalApp에서 SNS에 바로 로그인을 하면 된다고 착각하는 경우도 있지만 이것은 해결책이 되지 못한다. 이렇게 하면 LocalApp에서 AccessKey와 회원정보를 받을 수 있고 이것을 Backend의 데이터와 비교할 수 있다. 그런데 AccessKey는 매번 동일하게 발급되지는 않을 것이니 비교를 할 수가 없고 최초 로그인일 경우에는 서버에 AccessKey 자체가 없을 것이다. 물론 단순히 회원정보를 비교해서 로그인을 할 수도 없는 것이고…

여러가지로 생각 해 봣는데 이 경우에는 WebView를 사용하는 것이 최상의 해결책이 될 수 있을 것 같다.

/** *LocalApp에서 WebView를 이용 ‘Backend/snsLogin’에 접속하면 *‘SNS/oauth’로 리다이렉트된다 *SNS사이트 로그인을 처리하면 SNS사이트에서 사용자를 *요청한 리다이렉트 주소로 돌려보내준다 *예)’Backend/snsLoginRedirect’ */ LocalApp-WebView.access(‘Backend/snsLogin’) /** *리다이렉트된 페이지에서 Backend용 인증키를 보여준다 *LocalApp에서 이 인증키를 가져옴 */ LocalApp-WebView.read(‘Backend/snsRedirect’) /** * */ LocalApp-WebView.read(‘Backend/board’)

 

Backend에서 인증키를 발급/저장하고 이 키를 이용해서 인증할 수 있는 코드는 별도로 짜야된다.