라떼군 이야기


zendesk SSO 로그인 리퍼러 관련 문제해결

Problem

오래전에 개발된 코드 중에 zendesk1SSO 연동을 하고 있는 서비스가 있었다. TLSreferrer 관련 문제로 SSO 연동이 제대로 되지 않음을 발결했고, 확인하고 해결했던 과정을 간단히 정리한다.

  1. zendesk: 사이트에서 로그인 버튼 클릭 시 아래 과정을 거침

    1. https://{YOUR_DOMAIN}.zendesk.com/auth/v2/login/signin?return_to={RETURN_URL}&theme=hc&locale=ja&brand_id={BRAND_ID}&auth_origin={BRAND_ID},true,true&browser=chrome
    2. https://{YOUR_DOMAIN}.zendesk.com/auth/v2/login/sso?auth_origin={BRAND_ID},true,true&brand_id={BRAND_ID}&browser=chrome&locale=ja&return_to={RETURN_URL}&theme=hc
  2. 서비스: 위 URL을 거쳐 젠데스트 용 로그인 페이지로 이동

    1. https://{YOUR_RETURN_DOMAIN}/module/zendesk/login?brand_id={BRAND_ID}&locale_id=67&return_to={RETURN_URL}&target=zendesk&timestamp=1655939323
    2. 위 로그인 페이지는 인증여부를 확인하고 로그인 되있지 않으면 아래 주소로 이동
      1. https://{YOUR_RETURN_DOMAIN}/login
    3. 만약 인증이 되있으면 JWT인증 토큰 방급 등으로 zendesk 인증을 진행
      1. Single sign-on (SSO) options in Zendesk2
      2. Multibrand - Using multiple JWT single sign-on URLs3
  3. 기존 2-2에서 로그인 한 후 방문했던 이전 페이지로 이동하는 과정을 headerreferrer를 이용하고 있었음. 하지만 chrome 85 이상부터 에서 https 환경에서 referrer를 확인할 수 없게 변경되었으므로 정상 동작이 불가함

    • chrome 85부터 사용할 수 없음4
    • referrer 관련
      • A new default Referrer-Policy for Chrome - strict-origin-when-cross-origin5
      • 리퍼러 및 리퍼러 정책 모범 사례6
        • no-referrer-when-downgrade: TLS 환경에서는 전체 URL을 보내고 그렇지 않으면 origin만 보냄
        • origin-when-cross-origin: 같은 도메인인 경우만 전체 URL을 보냄
        • strict-origin-when-cross-origin: 같은 도메인이고 TLS 환경인 경우만 전체 URL을 보냄
  4. zendeskstrict-origin-when-cross-origin으로 referrer policy로 설정되있으므로 같은 도메인이고, TLS 환경인 경우만 referrer를 전송하게 된다.

  5. 그러므로 2-1, 2-2 에서 확인하는 referrer는 현재 사이트의 origin만 확인 가능하므로 정상 동작하지 않음, 하지만 한번 이상 로그인 을 시도하는 경우는 2-1에서 로그인이 이미 된것으로 탐지되므로 동작하는 것처럼 보이기도함

Solution

  • 해결방법
    • zendesk에서 strict-origin-when-cross-origin 수정요청: 불가
    • referrer에 의존하지 않도록 서비스 코드를 수정하여 해결

References