Shopify API, OAuth 2.0 앱 인증 프로세스 분석

온라인 토큰? 오프라인 토큰?

  • Shopify는 본래 access_token으로 오프라인 토큰만이 존재했다. 오프라인 토큰이란 쇼핑몰 관리자가 쇼핑몰에 앱을 설치한 시점에 모든 권한 위임이 발생하면서 오직 하나의(재발급 요청이 없는 한) access_token으로 모든 로그인한 사용자가 같은 권한으로 앱의 기능을 사용하는 형태이다. (앱이 관리자에 의해 삭제될 때까지 유효하다.)


  • 하지만 사용자에 따라 앱이 제공하는 기능을 제한할 필요가 있다. 앱 단위가 아닌 이러한 사용자 단위의 권한 위임을 제공하기 위한 방법으로 온라인 토큰이 도입되었다. (2016-10-20 적용) [관련 링크] 온라인 토큰 사용의 대표 사례는 Orders Printer 앱이다. 현재 로그인한 사용자에 따라 사용할 수 있는 기능에 제한이 있다.


  • 온라인 토큰access_token의 수명이 사용자의 로그인 수명과 일치한다. 사용자 로그인부터 로그아웃 시점까지와 같은 유효 시간을 가진다. 따라서 refresh_token은 지원되지 않는다. [관련 링크]


  • 결론적으로 오프라인 토큰온라인 토큰은 선택의 문제이다. 사용자 단위로 권한을 제한해야 한다면 사용자 로그인 시점에 온라인 토큰을 요청하면 되고 모두가 같은 권한을 가진다면 기존대로 오프라인 토큰을 요청하면 된다.

보안

  • Shopify에서 사용자가 앱에 대한 권한 위임에 동의하면 앱 서버(앱 등록시 정의된 redirect_uri)로 리다이렉트 요청이 발생한다. 이 시점에 쿼리스트링 으로 hmac 파라메터가 첨부되는데 앱 서버 입장에서는 이 리다이렉트 요청이 진짜 Shopify가 보낸 것인지 여부를 판단하는 서명 정보로 이용할 수 있다. [관련 링크]


  • hmac 파라메터의 정체는 쿼리스트링에서 hmac 자신을 제외한 나머지 모든 파라메터를 HMAC-SHA256으로 해시된 서명 문자열이다. 해시 생성에 사용되는 secret_key는 바로 앱 등록시 발급 받은 secret_key이다. secret_key는 앱 개발자만 알 수 있는 개인키이다.


  • Shopify는 본래 이러한 서명으로 MD5 방식의 signature 파라메터를 제공했으나 보안 강화를 위해 2015-06-01 부로 HMAC-SHA256 방식의 hmac 파라메터로 변경되었다. [관련 링크]

참고 글

저작자 표시 비영리 동일 조건 변경 허락
신고