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