Adicione suporte a SCIM como provedor de serviço

Como já mencionado aqui, acho que seria um recurso interessante se o Discourse suportasse o protocolo SCIM. SCIM é um padrão proposto pelo IETF através das RFCs 7644 e 7643, que visa fornecer uma solução para gerenciamento de usuários/grupos através de uma API Rest simples. Nosso caso de uso seria gerenciar identidades de usuários e associações de grupos via um serviço separado que atua como cliente SCIM, o Keycloak no nosso caso. O Discourse atuaria como um provedor de serviços SCIM. Além de qualquer SSO existente e criação centralizada de contas, isso teria as seguintes vantagens:

  • atribuir usuários a grupos;
  • alterar informações do usuário imediatamente em vários aplicativos;
  • excluir o usuário quando ele for removido do SSO;
  • obter a lista de usuários ou grupos de forma padronizada;

Recebemos financiamento da NGI via NLNet para implementações SCIM, você pode ler a proposta e sobre trabalhos relacionados em nosso fórum aqui. Tentarei implementar uma primeira solução em um plugin do Discourse por enquanto, mas seria bom integrar isso ao core do Discourse em algum momento. Me avisem sobre quaisquer pensamentos e opiniões!

5 curtidas

Parece estranho que a especificação deles use /Users e /Groups em vez de algo como .well-known/scim/Users. Parece garantido que isso entrará em conflito com rotas existentes em muitas aplicações.

Ficarei feliz em ajudar com isso se você tiver algum orçamento sobrando.

Posso imaginar que, se fosse bem escrito e amplamente utilizado (ou exigido por vários clientes corporativos), poderia se tornar um plugin oficial.

Não imagino que isso se tornaria parte do núcleo - mesmo o Oauth2 é um plugin.

4 curtidas

Acho que é possível usar qualquer caminho como prefixo para os endpoints SCIM, por exemplo, api/scim/v2/Users ou caminhos bem conhecidos que você sugere.

Sim, entendo as preocupações com o core, então talvez um objetivo possa ser que ele se torne um plugin oficial. Obrigado também pela oferta de ajuda, não há orçamento adicional, mas vamos ver no futuro como isso se desenvolve.

1 curtida

Ah. Isso faz sentido. Eu imaginei que fosse o caso, mas não vi isso na minha leitura rápida. Eu daria uma olhada nos outros plugins de autenticação como referência.

Aqui estão os plugins oficiais com ‘auth’ no nome

discourse-apple-auth/                  discourse-microsoft-auth/
discourse-authentication-validations/  discourse-oauth2-basic/
discourse-auth-no-email/               discourse-vk-auth/
discourse-development-auth/            discourse-wikimedia-auth/

Parece um projeto interessante

1 curtida

Uma primeira versão do plugin já está disponível aqui:

O mapeamento ainda é muito simples, apenas os campos básicos de usuários e grupos funcionarão. Testei com o plugin SCIM do keycloak e você já pode adicionar/modificar usuários no Keycloak, que serão então criados/atualizados no Discourse. O plugin SCIM do keycloak está aqui:

Qualquer feedback é muito bem-vindo :slight_smile: Testaremos mais com o keycloak em nosso ambiente e ainda quero testá-lo com o authentik.

4 curtidas

Isso é legal, ótima ideia. Ansioso para testar isso. Obrigado!

Seria ótimo se você pudesse postar isso como um tópico na categoria Plugin :slight_smile:

1 curtida

Na categoria Plugin, o botão de postar está desabilitado para mim e vejo a mensagem de que não tenho permissão para postar nessa categoria.

Junte-se ao grupo @plugin_authors. Isso permite que você crie um tópico nessa categoria.

Ah, obrigado, enviei uma solicitação :slight_smile:

1 curtida

… e finalmente postado: SCIM Plugin

2 curtidas