SSO가 사용자를 관리자로 강제로 생성하고 있습니다

안녕하세요

Discourse SSO를 통합하고 있는데, SSO 페이로드에서 해당 사용자가 관리자가 아니라고 명시되어 있음에도 불구하고 생성된 사용자가 관리자 권한을 얻는 문제를 겪고 있습니다.

현재 최신 베타 버전 2.8.0.beta6 [ f3273bd43e ]을 사용 중입니다.
예시는 다음과 같습니다:

SSO URL:

https://community.bloom.pm/session/sso_login?sso=ZXh0ZXJuYWxfaWQ9NjEzZjJmMzMzNWZkODc4NWU4Mjk4Y2JhJm5vbmNlPThiNzdjM2JlMDBmMThkMjYwMDhkYjkxOWQxODA4MzAyJmVtYWlsPW9tYXIlMkJtZW1iZXI0JTQwYmxvb20ucG0mdXNlcm5hbWU9bWVtYmVyNCZuYW1lPW1lbWJlcjQmYWRtaW49ZmFsc2UmbW9kZXJhdG9yPWZhbHNlJnN1cHByZXNzX3dlbGNvbWVfbWVzc2FnZT10cnVl&sig=fcb3e5d3d4b8c39078753cb495f4c3781dcca1f022851a2bdff2015e7fa489b1

sso 페이로드를 디코딩하면 다음과 같습니다:

external_id=613f2f3335fd8785e8298cba&nonce=8b77c3be00f18d26008db919d1808302&email=omar%2Bmember4%40bloom.pm&username=member4&name=member4&admin=false&moderator=false&suppress_welcome_message=true

그런데 member4 사용자는 관리자 권한으로 생성되었습니다.

설정 파일의 developer 항목에 member4의 이메일 주소가 포함되어 있나요?

DISCOURSE_DEVELOPER_EMAILS

거기에 나열된 모든 이메일 주소는 자동으로 관리자 권한을 부여받습니다.

2개의 좋아요

DISCOURSE_DEVELOPER_EMAILS에 없는 완전히 다른 도메인인 omar+member9@306.dev로 테스트해 봤는데도 문제가 여전히 남아 있습니다. 사용자에게 관리자 권한이 부여되었거든요.

SSO 서명에 사용 중인 API 키는 관리자 계정 소유인데, 이것이 영향을 미칠까요?

그렇게 들리지는 않네요. 무슨 작업을 하고 계신지 설명해 주실 수 있나요?

1개의 좋아요

기존 Discourse 사이트에 SSO를 방금 통합했는데, 이런 동작이 나타납니다.
사이트는 Docker(discourse_docker 저장소)로 실행 중입니다.

컨테이너에 로그인하여 Postgres DB에 접근해 보니, 해당 사용자의 관리자 플래그가 DB에서 false로 설정되어 있어 “make_developer_admin” 메서드에 의해 업데이트되지 않고 있습니다.

그 외 다른 원인이 있을까요?

저도 해당 플러그인을 사용하고 있습니다.

   - git clone https:// github.com/discourse/docker_manager.git
          - git clone https:// github.com/angusmcleod/discourse-events.git
          - git clone https:// github.com/gdpelican/babble.git
          - git clone https:// github.com/davidtaylorhq/discourse-whos-online.git
          - git clone https:// github.com/discourse/discourse-checklist.git
          - git clone https:// github.com/discourse/discourse-data-explorer.git
          - git clone https:// github.com/BeXcellent/discourse-allowiframe.git

문제 해결을 위해 디버깅을 활성화하는 것이 좋습니다.

DiscourseConnect 프로바이더 디버깅

DiscourseConnect 디버깅을 돕기 위해 사이트 설정인 verbose_discourse_connect_logging을 활성화할 수 있습니다. 이 사이트 설정을 활성화하면 YOURSITE.com/logs에 풍부한 진단 정보가 표시됩니다. YOURSITE.com/logs 하단의 warnings 상자를 :white_check_mark: 확인하십시오.

참고: Setup DiscourseConnect - Official Single-Sign-On for Discourse (sso)

사용자는 관리자(admin)가 아니지만, 더 근본적인 문제가 있습니다. 로그를 몇 가지 추가해 보았습니다.

ActiveRecord API를 사용하여 필터링하는 과정에서 버그가 발생한 것으로 보입니다. 쿼리를 로그로 확인해 보니 where 필터에 userid가 보이지 않아, 알림 데이터가 전역적으로 조회되고 있는 것처럼 보입니다.

포럼/토픽에서도 같은 일이 일어나고 있을 것으로 생각됩니다. userid 필터를 무시하고 모든 데이터를 가져오고 있는 것 같습니다.

이 문제를 어떻게 수정할 수 있을까요?

2번째 미디어 항목을 올립니다 (처음 오르는 사람이라서)

3번째 미디어 항목 게시 - 로그

user.notifications에 필터가 추가되지 않는 것 같습니다. 코드에 where 조건을 수동으로 추가하여 모달 알림 표시에서는 수정되었지만, 상세 페이지는 다른 코드 경로를 사용하므로 여전히 모든 항목이 표시됩니다. 진정한 해결책은 무엇인가요? :expressionless:

rails 버전: 6.1.4.1

bundle exec gem list --local

*** 로컬 GEMS ***

actionmailer (6.1.4.1)
actionpack (6.1.4.1)
actionview (6.1.4.1)
actionview_precompiler (0.2.3)
active_model_serializers (0.8.4)
activejob (6.1.4.1)
activemodel (6.1.4.1)
activerecord (6.1.4.1)
activesupport (6.1.4.1)
addressable (2.8.0)
aws-eventstream (1.2.0)
aws-partitions (1.432.0)
aws-sdk-core (3.112.1)
aws-sdk-kms (1.44.0)
aws-sdk-s3 (1.96.1)
aws-sdk-sns (1.38.0)
aws-sigv4 (1.2.3)
barber (0.12.2)
bootsnap (1.8.1)
builder (3.2.4)
bundler (2.2.26)
byebug (11.1.3)
cbor (0.5.9.6)
chunky_png (1.4.0)
coderay (1.1.3)
colored2 (3.1.2)
concurrent-ruby (1.1.9)
connection_pool (2.2.5)
cose (1.2.0)
cppjieba_rb (0.3.3)
crass (1.0.6)
css_parser (1.10.0)
diffy (3.4.0)
discourse-ember-rails (0.18.6)
discourse-ember-source (3.12.2.3)
discourse-fonts (0.0.9)
ecma-re-validator (0.3.0)
email_reply_trimmer (0.1.13)
ember-data-source (3.0.2)
ember-handlebars-template (0.8.0)
ember-source (2.18.2)
erubi (1.10.0)
excon (0.85.0)
execjs (2.8.1)
exifr (1.3.9)
faraday (1.7.2)
faraday-em_http (1.0.0)
faraday-em_synchrony (1.0.0)
faraday-excon (1.1.0)
faraday-httpclient (1.0.1)
faraday-net_http (1.0.1)
faraday-net_http_persistent (1.2.0)
faraday-patron (1.0.0)
faraday-rack (1.0.0)
fast_blank (1.0.1)
fast_xs (0.8.0)
fastimage (2.2.5)
ffi (1.15.4)
fspath (3.1.2)
gc_tracer (1.5.1)
globalid (0.5.2)
guess_html_encoding (0.0.11)
hana (1.3.7)
hashie (4.1.0)
highline (2.0.3)
hkdf (0.3.0)
htmlentities (4.3.4)
http_accept_language (2.1.1)
i18n (1.8.10)
image_optim (0.30.0)
image_size (2.1.2)
in_threads (1.5.4)
jmespath (1.4.0)
jquery-rails (4.4.0)
json (2.5.1)
json_schemer (0.2.18)
jwt (2.2.3)
kgio (2.11.4)
libv8-node (15.14.0.1 x86_64-linux)
lograge (0.11.2)
logstash-event (1.2.02)
logstash-logger (0.26.1)
logster (2.9.7)
loofah (2.12.0)
lru_redux (1.1.0)
lz4-ruby (0.3.3)
mail (2.8.0.edge)
maxminddb (0.1.22)
memory_profiler (1.0.0)
message_bus (3.3.6)
method_source (1.0.0)
mini_mime (1.1.1)
mini_racer (0.4.0)
mini_scheduler (0.13.0)
mini_sql (1.1.3)
mini_suffix (0.3.2)
minitest (5.14.4)
msgpack (1.4.2)
multi_json (1.15.0)
multi_xml (0.6.0)
multipart-post (2.1.1)
mustache (1.1.1)
nio4r (2.5.8)
nokogiri (1.12.4 x86_64-linux)
oauth (0.5.6)
oauth2 (1.4.7)
oj (3.13.2)
omniauth (1.9.1)
omniauth-facebook (8.0.0)
omniauth-github (1.4.0)
omniauth-google-oauth2 (0.8.2)
omniauth-oauth (1.2.0)
omniauth-oauth2 (1.7.1)
omniauth-twitter (1.4.0)
openssl (2.2.0)
openssl-signature_algorithm (1.1.1)
optimist (3.0.1)
pg (1.2.3)
progress (3.6.0)
pry (0.13.1)
pry-byebug (3.9.0)
pry-rails (0.3.9)
public_suffix (4.0.6)
puma (5.4.0)
r2 (0.2.7)
racc (1.5.2)
rack (2.2.3)
rack-mini-profiler (2.3.3)
rack-protection (2.1.0)
rack-test (1.1.0)
rails-dom-testing (2.0.3)
rails-html-sanitizer (1.4.2)
rails_failover (0.7.3)
rails_multisite (3.1.0)
railties (6.1.4.1)
raindrops (0.19.2)
rake (13.0.6)
rbtrace (0.4.14)
rchardet (1.8.0)
redis (4.4.0)
redis-namespace (1.8.1)
regexp_parser (2.1.1)
request_store (1.5.0)
rinku (2.0.6)
rotp (6.2.0)
rqrcode (2.1.0)
rqrcode_core (1.2.0)
rtlit (0.0.5)
ruby-readability (0.7.0)
ruby2_keywords (0.0.5)
rubyzip (2.3.2)
sanitize (6.0.0)
sassc (2.0.1)
sassc-rails (2.1.2)
seed-fu (2.3.9)
sidekiq (6.2.2)
sprockets (3.7.2)
sprockets-rails (3.2.2)
sshkey (2.0.0)
stackprof (0.2.17)
thor (1.1.0)
tilt (2.0.10)
tzinfo (2.0.4)
uglifier (4.2.0)
unf (0.1.4)
unf_ext (0.0.7.7)
unicorn (6.0.0)
uri_template (0.7.0)
webpush (1.1.0)
xorcist (1.1.2)
zeitwerk (2.4.2)

새로운 Docker 컨테이너를 처음부터 시작하고 자산/데이터를 옮겼더니 문제가 해결되었습니다.
기존 컨테이너를 다시 빌드하는 것은 도움이 되지 않았습니다.

#closed

1개의 좋아요