앱 개발에서 SNS 인증 클라이언트, 서버 연계

3622 단어 SwiftOAuthRails

SNS 연계란?



이 Quiita에서도 자주 볼 수 있는, 로그인시의 「Twitter로 등록」등의 것입니다.


이번에는
  • firebase와 같은 mBaas를 사용하지 않음
  • WebView 사용 안함
  • 모바일 앱

  • 라는 조건에서
    클라이언트, 서버의 연계 방법을 설명합니다. (OAuth 인증)

    클라이언트



    기본적으로 클라이언트 측에서 인증 서버와 연동하여 사용자의 액세스 권한을 얻습니다.
    클라이언트의 프레임워크를 준수하는 다양한 SNS SDK를 통해 최근에는 쉽게 구현할 수 있습니다.

    권한 서버에서 사용자별 액세스 토큰을 검색합니다.
    이것을 서버로 보냅니다.

    예 Swift의 TwitterSDK를 사용한 인증 서버와의 연계


    TWTRTwitter.sharedInstance().logIn(completion: { (session, error) in
        if (session != nil) {
            print("signed in as \(session.userName)");
        } else {
            print("error: \(error.localizedDescription)");
        }
    })
    

    서버



    클라이언트에서 액세스 토큰을 얻었다고 해서 그대로 액세스 토큰을 DB에 저장해서는 안됩니다. 왜냐하면 최근의 SNS의 액세스 토큰은 유효기간이나 사용횟수 제한 등의 사용제한이 설치되어 있기 때문입니다. 이렇게하면 여러 번 동일한 문자열의 액세스 토큰을 사용할 수 없습니다.
    따라서 다음에 로그인할 때 특유의 User인지를 판별하기 위해서는 액세스 토큰이 아닌 다른 data를 판별 data로 해야 합니다.
    예를 들어 이메일 주소입니다. 액세스 토큰을 사용하여 SNS 제공 서버에서 다양한 데이터를 검색할 수 있지만, 그 중 하나에 이메일 주소도 있습니다.
    메일 주소의 장점은, 만일 SNS의 인가 서버를 사용할 수 없게 되었을 때에, 대용으로서 메일 주소 로그인으로서, SNS로부터 취득한 메일 주소를 사용할 수도 있다는 것입니다. (단, 어떤 SNS 제공 서버에서도 메일 주소를 취득할 수 있는 것은 아니며, SNS로 등록한 메일 주소를 사용자가 분실하고 있을 가능성도 있기 때문에, 최상의 마스트한 요건은 아닙니다. )

    예제 RubyOnRails에서 access_token을 사용하여 이메일 얻기


    require 'koara'
    module FacebookService
      class << self
        def fetch_mail(access_token)
          Koala::Facebook::API.new(access_token).get_object('me')['email']
        end
      end
    end
    

    좋은 웹페이지 즐겨찾기