Tag Archives: OAuth

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

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에서 인증키를 발급/저장하고 이 키를 이용해서 인증할 수 있는 코드는 별도로 짜야된다.

OAuth1.0a spec 한글

http://oauth.net/core/1.0a/

필요한 부분만 발췌 해설(번역이 아닌것은 개인적인 해석이 들어갔기 때문)
다음에서 한글 문서를 제공했었는데 지네 서비스 2.0으로 올려다고 문서를 빼버려서 따로 정리.
OAuth1과 OAuth2의 뼈인간은 이름이 다르다.

3. Definitions용어 정의

  • Service Provider : 이름그대로 OAuth10a 인증을 제공하는 서비스 – Facebook, Twitter, Google, Daum, Naver 등이 Service Provider의 역할을 한다. 이 문서를 보는 사람들도 이 Service Provider에 접근하기 위해 OAuth를 찾고 있을겠지?
  • Consumer : OAuth10a인증을 통해 Service Provider에 접근하기를 원하는 웹사이트,앱 등
  • User : 말 그대로 일반 사용자… Service Provider에 가입하고 Consumer를 통해서 Service Provider에 접근하는 사람들
  • Protected Resource(s) : Service Provider에서 관리하는 리소스… Service Provider에서는 User의 권한에 따라 Protected Resources의 공개 여부를 결정한다
  • Consumer Developer : Consumer를 만드는 사람들
  • Consumer Key : Consumer의 로그인 ID같은 역할
  • Consumer Secret : Consumer의 로그인 비밀번호 역할
  • Request Token : Consumer에서 Service Provider에 근해 Request Token-Token Secret을 수신한다
  • Access Token : Request Token을 http://facebook.com?oauth_token?{request_token} 처럼 브라우저의 주소로 사용자를 넘겨준다. 사용자가 Service Provider에 로그인 후 사용허가를 해 주면 Service Provider에서 Consumer쪽으로 verifier값을 전달해주고 Request Token과 verifier을 이용해 ServiceProvider에서 AcceccToken과 AccessTokenSecret을 받을 수 있다. Access Token은 임시 사용자 ID와 비밀번호 역할을 하는 값으로 Access Token값이 만료되기 전까지 계속 사용 가능하다. 보통은 시간제한이 없다
  • Token Secret : Request Token, Access Token의 비밀번호..
  • OAuth Protocol Parameters : OAuth프로토콜 파라미터는 “oauth_”로 시작한다

4. Documentation and Registration
?????
OAuth includes a Consumer Key and matching Consumer Secret that together authenticate the Consumer (as opposed to the User) to the Service Provider. Consumer-specific identification allows the Service Provider to vary access levels to Consumers (such as un-throttled access to resources).

Service Providers SHOULD NOT rely on the Consumer Secret as a method to verify the Consumer identity, unless the Consumer Secret is known to be inaccessible to anyone other than the Consumer and the Service Provider. The Consumer Secret MAY be an empty string (for example when no Consumer verification is needed, or when verification is achieved through other means such as RSA).

4.1. Request URLs
Request Token URL :
User Authorization URL :
Access Token URL :