OAuth에서 omniauth-facebook이 무엇을하고 있는지 보았습니다.

배경



omniauth를 사용해 Facebook과의 OAuth를 해 보았다, 라고 하는 기사는 넷상에 많이 구르고 있다.
하지만, 어떻게 실현되고 있는지에 대해서, 상세를 해설하고 있는 사이트를 본 적이 없었기 때문에 정리해 둔다.

대상 버전


  • omniauth (1.2.1)
  • omniauth-oauth2 (1.1.2)
  • omniauth-facebook (1.6.0)

  • omniauth-facebook



    앱과 Facebook 사이에 서서 Facebook과 OAuth를 해주는 gem.
    핵심이 되는 OmniAuth::Strategies::Facebook 클래스는 rack middleware가 되어 있어 특정의 패스에의 액세스를 기점으로 OAuth의 리퀘스트 개시·Callback 처리를 실시하는 구조로 되어 있다.

    상속 관계



    OmniAuth::Strategies::Facebook의 상속 관계는 다음과 같습니다.



    OAuth의 기본적인 기능이나 rack middleware로서의 기능에 대해서는 OmniAuth::Strategy에 구현되어 있다.
    OAuth2.0과 관련된 부분은 OmniAuth::Strategies::OAuth2에,
    Facebook에 관련된 부분이 OmniAuth::Strategies::Facebook에 구현되어 있다.

    시퀀싱



    크게 이하의 3개의 페이즈로 나눌 수 있다.
    거친 시퀀스는 아래 그림 참조.
  • Facebook에 대한 OAuth 요청 (아래 그림 2)
  • /users/auth/facebook에 대한 요청 후크
  • 필요한 매개 변수를 채우고 Facebook으로 리디렉션합니다.

  • Facebook 인증 (아래 그림 3,4)
  • 인증 및 앱 승인

  • Callback 처리 (아래 그림 5)
  • Authorization Code를 바탕으로 액세스 토큰 취득
  • 액세스 토큰을 사용하여 사용자 정보 얻기
  • 사용자 정보에서 AuthHash를 생성하여 env에 채우기
  • 앱 호출




  • AuthHash는 어플리케이션으로 인증 정보나 유저 정보를 취급하기 위한 정보가 들어간 hash.
    자세한 내용은 여기를 참조 .

    클래스 다이어그램



    주요 등장인물은
  • application
  • omniauth-facebook (omniauth, omniauth-oauth)
  • oauth2
  • facebook



  • 특정 경로에 대한 액세스를 후크와 omniauth-facebook에서 후크.
    omniauth-facebook과 Facebook과의 교환에는 oauth2가 사용되고 있다.
    그 때의 HTTP 클라이언트는 faraday.
    OAuth의 기본적인 등장 인물(액세스 토큰, Authorization Code 등)은 OAuth2에 추상화되어 있는 것을 알 수 있다.
    AuthHash는 omniauth의 개념이므로 omniauth에 정의되어 있습니다.

    좋은 웹페이지 즐겨찾기