Tentando Criar Contas Automaticamente ao Usar o Plugin SAML

Continuando a discussão de Plugin SAML no repositório. Multissítio:

Estou tentando utilizar o seguinte código no plugin SAML para criar automaticamente uma conta após um usuário autenticar com sucesso, de modo que os usuários não sejam confrontados com a caixa de diálogo de login na qual poderiam, em tese, alterar seu e-mail, nome de usuário e nome. Preferiria que os usuários não tivessem controle sobre essas configurações e, em vez disso, que elas fossem definidas automaticamente com base na autenticação SAML.

Meu arquivo app.yml contém:

  ...
  # Forçar o atributo fullName da afirmação SAML para sobrescrever o atributo name, de modo que
  # o nome completo do usuário será mapeado para o campo Nome do Discourse e ajudará
  # a complementar o campo Nome de Usuário numérico nas postagens.
  DISCOURSE_SAML_ATTRIBUTE_STATEMENTS: "name:fullName"

  DISCOURSE_SAML_AUTO_CREATE_ACCOUNT: true
  ...

Ao testar esse recurso, vejo o seguinte erro nos logs:

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"

Alguma ideia se preciso configurar o plugin para forçar que o “uid” seja definido por meio de um dos atributos da afirmação SAML?

Quando DISCOURSE_SAML_AUTO_CREATE_ACCOUNT está definido como false ou não está presente, a autenticação baseada em SAML funciona, mas o usuário vê a caixa de diálogo na qual pode modificar seu e-mail, nome de usuário e nome.

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"
  ...