SSO crée de force l'utilisateur en tant qu'administrateur

Bonjour,

Je suis en train d’intégrer l’authentification unique (SSO) de Discourse, mais je rencontre un problème : l’utilisateur créé se voit attribuer des privilèges d’administrateur, alors que la charge utile SSO indique explicitement qu’il ne devrait pas en avoir.

Je suis sur la dernière version bêta : 2.8.0.beta6 [ f3273bd43e ].
Voici un exemple :

URL SSO :

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

Le décodage de la charge utile SSO donne :

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

Cependant, member4 a été créé avec des privilèges d’administrateur.

L’adresse e-mail de member4 se trouve-t-elle dans le fichier de configuration sous developer ?

DISCOURSE_DEVELOPER_EMAILS

Toute adresse e-mail répertoriée ici deviendra automatiquement administrateur.

2 « J'aime »

Je viens de tester avec omar+member9@306.dev, qui est un domaine totalement différent et qui ne figure pas dans DISCOURSE_DEVELOPER_EMAILS, mais le problème persiste : l’utilisateur a obtenu un accès administrateur.

La clé API que j’utilise pour signer le SSO appartient à un administrateur. Est-ce que cela peut avoir une incidence ?

Cela ne semble pas correct. Pouvez-vous expliquer ce que vous faites ?

1 « J'aime »

Je viens d’intégrer SSO sur un site Discourse existant et je rencontre ce comportement.
Le site fonctionne sous Docker (dépôt discourse_docker).

Je me suis connecté au conteneur et j’ai accédé à la base de données PostgreSQL. Le drapeau admin de l’utilisateur est défini à false dans la base, il n’est donc pas mis à jour par la méthode make_developer_admin.

Quoi d’autre pourrait en être la cause ?

J’utilise également ces 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

Vous voudrez peut-être activer le débogage pour résoudre les problèmes.

Déboguer votre fournisseur DiscourseConnect

Pour faciliter le débogage de DiscourseConnect, vous pouvez activer le paramètre du site verbose_discourse_connect_logging. En activant ce paramètre, des diagnostics détaillés s’afficheront dans VOTRESITE.com/logs. Assurez-vous de cocher la case :white_check_mark: warnings en bas de VOTRESITE.com/logs.

référence : Setup DiscourseConnect - Official Single-Sign-On for Discourse (sso)

L’utilisateur n’est pas administrateur, mais il y a un problème plus profond. J’ai ajouté quelques logs :

Il semble s’agir d’un bug de filtrage lié à l’API ActiveRecord. J’ai enregistré les requêtes et je ne vois pas d’ID utilisateur dans le filtre WHERE, ce qui suggère que les données de notification sont récupérées globalement.
Je pense que la même chose se produit avec les forums et les sujets : le filtre d’ID utilisateur est ignoré et tout est récupéré.

Comment puis-je corriger cela ?

Publication du 2e élément multimédia (puisque je suis nouveau)

Publication du 3ᵉ élément multimédia - journaux

Il semble que user.notifications n’ajoute pas le filtre. J’ai ajouté manuellement une condition where dans le code, ce qui a corrigé l’affichage des notifications dans la fenêtre modale. Cependant, la page de détails utilise un autre chemin de code, elle affiche donc toujours tout. Quelle est la vraie solution ? :expressionless:

version de rails : 6.1.4.1

bundle exec gem list --local

*** GEMS LOCAUX ***

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)

J’ai lancé un nouveau conteneur Docker à partir de zéro et déplacé les assets/données, cela a résolu le problème.
La reconstruction du conteneur existant n’a pas aidé.

#closed

1 « J'aime »