Discourse-saml은 멀티사이트와 호환되지 않습니다

신규로 구성된 Discourse 인스턴스에서 SAML이 실패하는 이유는, 폼을 제출하는 스크립트를 거부하는 기본 Content-Security-Policy 정책 때문입니다…

CSP와 함께 SAML 플러그인을 성공적으로 사용 중인 많은 고객을 호스팅하고 있습니다. 브라우저 콘솔에서 확인되는 오류를 공유해 주실 수 있나요?

우리는 모든 호스팅에 CDN을 사용하고 있으므로, CDN이 없는 사용자의 경우 CSP 규칙이 작동하지 않는 것 같습니다 :thinking:

1개의 좋아요

네, 죄송합니다. 그렇게 하려 했지만 에러 메시지를 재현하지 못했습니다. 에러는 여전히 남아 있습니다.
이제 favicon과 apple icon에서 ‘mixed content’ 에러만 발생합니다. 이미지는 force_https가 체크되기 전에 업로드되었지만, 이 설정이 모든 아이콘의 소스를 처리해야 한다고 생각합니다. 이것이 버그인가요?

원래 받았던 에러를 재현해 보려고 하지만 아직 성공하지 못했습니다. 화면에 표시되는 에러는 “죄송합니다. 계정 인가 중 오류가 발생했습니다. 다시 시도해 주세요.” 입니다. 잘못된 티켓이라고 생각하는데, Discourse와 Keycloak 양쪽 모두 기존에 정상 작동하는 인스턴스와 설정이 일치합니다. 이상하네요.

네, 죄송합니다. 그렇게 하려고 계획하고 있었지만, 오류 메시지를 재현할 수 없습니다 – 오류는 여전히 남아있지만요.

자, 오류를 찾았습니다. 설정에서 비롯된 것 같습니다:

  1. ps.zoethical.org가 '메인’인 멀티사이트 인스턴스이며, SAML은 원래 이 사이트용으로 구성되었습니다.
  2. forum.zoonklopper.be 인스턴스에는 SAML 버튼이 표시되지만, 스코프는 ps.zoethical.org용으로 정의되어 있습니다.
(saml) Authentication failure! invalid_ticket: OneLogin::RubySaml::ValidationError, https://ps.zoethical.org is not a valid audience for this Response - Valid audiences: https://forum.zonnklopper.be

ps.zoethical.org를 청중(audience)으로 추가하면 다른 오류가 발생합니다:

(saml) Authentication failure! invalid_ticket: OneLogin::RubySaml::ValidationError, The response was received at https://forum.zonnklopper.be/auth/saml/callback instead of https://ps.zoethical.org/auth/saml/callback

SAML 플러그인은 멀티사이트를 지원하지 않습니다.

1개의 좋아요

네, 방금 깨달은 바로는 그렇습니다. 정말 유감입니다. :frowning:

사실, 이 플러그인의 비호환성은 다음을 의미합니다:

  1. 멀티사이트의 첫 번째 사이트(또는 DISCOURSE_HOSTNAME을 통해 구성된 사이트)에서는 작동합니다.
  2. 버튼은 다른 모든 인스턴스의 로그인 UI에 표시됩니다.
  3. 그러나 해당 버튼은 명확한 해결책 없이 실패합니다.

discourse-saml에 대한 전용 주제가 #customization:plugin에 없으므로, 하나를 생성하고 첫 번째 게시물에 이 주의사항을 언급하는 것을 제안합니다. SAML을 언급하는 50개 이상의 주제에서 상당한 통합이 가능할 것이라고 확신합니다. 이 사실을 미리 알았더라면 제 서비스를 다르게 설정했을 것입니다.

(참고로, 원래의 CSP 오류는 iframe이 현재 사이트 대신 원래 사이트를 로드하려고 시도하기 때문일 가능성이 가장 높습니다.)

멀티사이트에서 SAML 버튼 숨기기

멀티사이트에서 SAML 플러그인을 활성화한 사람들을 위한 빠른 해결책입니다. :slight_smile:

  1. 관리자 > 테마로 이동하여 "새로 설치"를 클릭합니다.
  2. 새 컴포넌트를 생성합니다 (이름: “SAML 버튼 숨기기”).
  3. CSS 추가:
    #login-buttons .btn.btn-social.saml {
        display: none; /* 플러그인이 멀티사이트와 호환되지 않음 */
    }
    
  4. 컴포넌트를 모든 테마에 적용합니다.

이제 이 인스턴스에서 작동하지 않는 SAML 버튼은 보이지 않게 됩니다.

이 주제는 3일 후 자동으로 닫혔습니다. 새로운 답글을 더 이상 작성할 수 없습니다.