Intentando crear cuentas automáticamente al usar el plugin SAML

Continuando la discusión desde Plugin SAML en el repositorio. Multisitio:

Estoy intentando utilizar el siguiente código en el plugin SAML para crear automáticamente una cuenta después de que un usuario se haya autenticado correctamente, de modo que los usuarios no se encuentren con el cuadro de diálogo de inicio de sesión en el que podrían cambiar su correo electrónico, nombre de usuario y nombre. Prefiero que los usuarios no tengan control sobre esas configuraciones y que, en su lugar, se establezcan automáticamente según la autenticación SAML.

Mi archivo app.yml tiene:

  ...
  # Forzar el atributo fullName de la afirmación SAML para anular el atributo name, de modo que
  # el nombre completo del usuario se mapee al campo Nombre de Discourse y ayude a
  # complementar el campo Nombre de usuario numérico en las publicaciones.
  DISCOURSE_SAML_ATTRIBUTE_STATEMENTS: "name:fullName"

  DISCOURSE_SAML_AUTO_CREATE_ACCOUNT: true
  ...

Cuando pruebo esta función, veo el siguiente error en los registros:

Completed 500 Internal Server Error in 175ms (ActiveRecord: 0.0ms)
ActiveRecord::NotNullViolation (PG::NotNullViolation: ERROR:  null value in column "uid" violates not-null constraint
DETAIL:  Failing row contains (2, 3, null, saml, user@company.com, Smith, John, 2019-06-03 21:40:55.44066, 2019-06-03 21:40:55.44066).
: INSERT INTO "oauth2_user_infos" ("user_id", "provider", "email", "name", "created_at", "updated_at") VALUES (3, 'saml', 'user@company.com', 'Smith, John', '2019-06-03 21:40:55.440660', '2019-06-03 21:40:55.440660') RETURNING "id")
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-1.0.2/lib/patches/db/pg.rb:69:in `async_exec_params'
Failed to handle exception in exception app middleware : PG::NotNullViolation: ERROR:  null value in column "uid" violates not-null constraint
DETAIL:  Failing row contains (2, 3, null, saml, user@company.com, Smith, John, 2019-06-03 21:40:55.44066, 2019-06-03 21:40:55.44066).
: INSERT INTO "oauth2_user_infos" ("user_id", "provider", "email", "name", "created_at", "updated_at") VALUES (3, 'saml','user@company.com', 'Smith, John', '2019-06-03 21:40:55.440660', '2019-06-03 21:40:55.440660') RETURNING "id"

¿Alguna idea sobre si necesito configurar el plugin para forzar que “uid” se establezca mediante uno de los atributos de la afirmación SAML?

Cuando DISCOURSE_SAML_AUTO_CREATE_ACCOUNT está establecido en false o no está presente, la autenticación basada en SAML funciona, pero el usuario ve el cuadro de diálogo en el que puede modificar su correo electrónico, nombre de usuario y nombre.

Problem has been solved. We had inadvertently had removed from the ADFS IdP configuration the “nameid” from the SAML response. Once we added that back in, the auto create account feature worked fine!

With both the create account option set to true and the other settings shown below in our app.yml, we’re able to avoid having both login dialog windows being displayed. Now new users just click “Login”, authenticate via the IdP and then are put into their new Discourse account all without being able to override username, name and email address in an intervening dialog.

Once a user gets into Discourse, they cannot edit their email address, but we are allowing them to change their username so that they can have a more recognizable “nickname” in @ mentions and such.

  ...
  # Force fullName attribute from SAML assertion to override name attribute so that
  # the user's full name will be mapped to Discourse's Name field and will help
  # augment the numeric User Name field on posts.
  DISCOURSE_SAML_ATTRIBUTE_STATEMENTS: "name:fullName"

  DISCOURSE_SAML_AUTO_CREATE_ACCOUNT: true
  ...
  - exec: rails r "SiteSetting.login_required=true"
  - exec: rails r "SiteSetting.enable_local_logins=false"

  - exec: rails r "SiteSetting.email_editable=false"

  - exec: rails r "SiteSetting.display_name_on_posts=true"
  - exec: rails r "SiteSetting.prioritize_username_in_ux=true"
  ...
5 Me gusta

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.