SSO está creando forzosamente al usuario como administrador

Hola,

Estoy integrando el SSO de Discourse, pero estoy teniendo un problema: el usuario que se crea obtiene privilegios de administrador, aunque el payload del SSO indique explícitamente que no debería.

Estoy en la última beta: 2.8.0.beta6 [ f3273bd43e ].
Aquí hay un ejemplo:

URL del SSO:

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

Al decodificar el payload del SSO se obtiene:

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

Sin embargo, member4 fue creado con privilegios de administrador.

¿Está la dirección de correo electrónico de member4 en el archivo de configuración bajo developer?

DISCOURSE_DEVELOPER_EMAILS

Cualquier dirección de correo electrónico que se liste allí se convertirá automáticamente en administrador.

2 Me gusta

Acabo de probar con omar+member9@306.dev, que es un dominio completamente diferente y no está en DISCOURSE_DEVELOPER_EMAILS, pero el problema persiste: el usuario obtuvo acceso de administrador.

La clave de API que estoy utilizando para firmar el SSO pertenece a un administrador; ¿afecta esto algo?

¿Eso no suena correcto? ¿Puedes explicar qué estás haciendo?

1 me gusta

Acabo de integrar SSO en un sitio de Discourse existente y estoy experimentando este comportamiento.
El sitio se ejecuta en Docker (repositorio discourse_docker).

Ingresé al contenedor y accedí a la base de datos de PostgreSQL; el usuario tiene la bandera de administrador establecida en false en la base de datos, por lo que no se está actualizando mediante el método “make_developer_admin”.

¿Qué más podría estar ocurriendo?

También estoy usando esos plugins

   - 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

Es posible que desees habilitar la depuración para solucionar problemas.

Depuración de tu proveedor de DiscourseConnect

Para ayudar en la depuración de DiscourseConnect, puedes habilitar la configuración del sitio verbose_discourse_connect_logging. Al activar esta configuración, aparecerán diagnósticos detallados en YOURSITE.com/logs. Asegúrate de marcar :white_check_mark: la casilla warnings en la parte inferior de YOURSITE.com/logs.

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

El usuario no es administrador, sin embargo, hay un problema más profundo; agregué algunos registros de depuración.

Parece ser algún tipo de error de filtrado al usar la API de ActiveRecord. Registré las consultas y no veo el userid en el filtro where, por lo que parece que está obteniendo los datos de notificaciones de forma global.

Supongo que lo mismo está ocurriendo con los foros y los temas; de alguna manera está ignorando el filtro de userid y obteniendo todo.

¿Cómo puedo solucionar esto?

Publicando el segundo elemento multimedia (ya que soy nuevo)

Publicando el 3º elemento multimedia: registros

Parece que user.notifications no está aplicando el filtro. He agregado manualmente una condición where en el código y se solucionó la visualización de las notificaciones en el modal, pero en la página de detalles se utiliza una ruta de código diferente, por lo que aún se muestra todo. ¿Cuál es la solución real? :expressionless:

versión de rails: 6.1.4.1

bundle exec gem list --local

*** GEMS LOCALES ***

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)

Comencé un nuevo contenedor de Docker desde cero y moví los activos/los datos, eso solucionó el problema.
Reconstruir el contenedor existente no ayudó.

#cerrado

1 me gusta