Hi all - I am interested in setting up a few small community sites with discourse plus nextcloud for document and media content sharing. It would be loverly and preferable to have SSO with discourse as SSO provider. If anyone has succeeded in doing this and can share a recipe here on how to do it I’d appreciate it. Thanks!
The communities I am looking at creating are for my own geographically dispersed family, my neighborhood, and my son’s school.
I might also be interested in setting up a nextcloud for the organization I work for that already has an active community website. Though my organization’s community uses discourse, it uses wordpress as SSO auth now. Down the pike I’m also interested in flipping that around so we can benefit from features reliant on discourse as SSO auth.
Edit: this seems to be the page - I will be exploring this today and will let others know what I come up with if anything. Any guidance along the way much appreciated.
Legal! Vejo que o Discourse não é fornecido como um “provedor OAuth integrado” para o aplicativo de login social no Nextcloud. Existem várias maneiras de configurar isso usando o Discourse - como você fez? Você se importaria de fornecer uma receita?
Vejo também que o aplicativo permite herdar grupos do provedor de autenticação, o que é muito bom. Eu adoraria poder fazer isso com minha configuração Discourse/Nextcloud.
Existem também outros aplicativos Nextcloud que parecem relevantes aqui, mas não testei todos. Existe o aplicativo OpenID Connect Login. Um aplicativo Discourse SSO também existe, mas parece desatualizado/não testado.
Obrigado, Patrick! Instalei o aplicativo novamente e vejo a opção “Custom Discourse”. Ainda não está explicado na documentação, por isso pensei que nada havia mudado. Também na página https://apps.nextcloud.com/apps/sociallogin há um link para um link quebrado no fórum de suporte do nextcloud, então estou lutando para descobrir onde falar sobre este aplicativo com os desenvolvedores.
Agora está funcionando, mas o maior problema que estou tendo é que não consigo descobrir como habilitar este como o único método para fazer login para todos os usuários existentes por padrão.
O segundo maior problema é que os detalhes do usuário não estão sendo transferidos corretamente do discourse para o nextcloud. Novos usuários criados no nextcloud recebem um nome de usuário gerado automaticamente no formato [nome interno]-[id do usuário], então, no caso do meu site, por exemplo, kb2-3797. O nome é transferido, mas outros detalhes do perfil precisam ser preenchidos novamente no nextcloud. O avatar também não é transferido.
Também estou me perguntando como o usuário definirá seu nome de usuário e senha para o cliente desktop ou móvel, quando este for o único método de login para o aplicativo web nextcloud. Acho que eles terão que saber ir às preferências de conta no aplicativo web nextcloud para configurar as credenciais de login do nextcloud.
Algumas outras coisas que notei:
as configurações do aplicativo não são acessadas pela seção apps, mas pela barra lateral de configurações de administração. Levei um minuto para encontrar.
existem três seções nas configurações de administração para o aplicativo, e as seções superior e inferior têm botões de salvar, mas a do meio (para provedores personalizados) não. Não está claro qual usar para salvar as configurações personalizadas do discourse. Resposta: ambos funcionam da mesma maneira.
existem muitas configurações de aplicativo. estas parecem funcionar melhor para minha configuração:
disable auto create new users = permite que novos usuários sejam criados no nextcloud se eles existirem no discourse
create users with disabled account = não desabilita usuários recém-criados
allow users to connect social logins with their account = permite que usuários existentes optem por fazer login via discourse ( não consigo descobrir como definir como padrão permitir que usuários façam login via discourse)
update user profile every login = sincroniza grupos do discourse com grupos do nextcloud toda vez que eles fazem login. ( não sincroniza corretamente nome de usuário, nome, bio e outras informações de perfil)
do not prune not available user groups on login ( não sei o que isso faz, mas está habilitado por padrão. Suspeito que impede a remoção do usuário de grupos existentes do nextcloud se eles não forem mapeados do discourse?)
automatically create groups if they do not exist = desabilitado porque cria alguns nomes de grupo feios que replicam grupos que você deseja (veja abaixo)
restrict login for users without mapped groups = desabilitado
restict login for users without assigned groups = desabilitado
disable notify admins about new users = desabilitado porque é útil para mim ver quando novos usuários do nextcloud são criados
hide default login = incentiva os usuários a fazer login via discourse, embora ainda seja possível fazer login diretamente com o nome de usuário/email e senha do nextcloud.
Perdi o acesso de administrador imediatamente na primeira vez que tentei, antes de criar mapeamentos de grupo. Para recuperá-lo, tive que ir para a linha de comando e executar occ group:adduser admin USERNAME
O mapeamento de grupo funciona muito bem! O mais importante foi adicionar o mapeamento de admins → admin do nextcloud para que os administradores do meu fórum tenham privilégios de administrador no nextcloud. Também consegui adicionar mapeamentos para grupos usados para categorias seguras, para também dar acesso a pastas seguras no nextcloud relacionadas a essas categorias seguras.
IMHO essa é a melhor maneira de implementá-lo, já que o id é usado principalmente internamente e não é visível em muitos lugares para usuários normais.
O Nextcloud não tem uma maneira fácil de renomear usuários, mas o Discourse tem. Renomear um usuário no Discourse pode levar a alguns comportamentos estranhos com o Nextcloud se os nomes não corresponderem mais.
Você deve usar senhas de dispositivo em vez disso. A senha do Nextcloud pode ser diferente da senha do Discourse, o que levaria à confusão e pularia o SSO.
Acho que esses são problemas gerais com a interface do usuário do Nextcloud e não específicos do aplicativo.
Defina a opção social_login_auto_redirect como true, conforme descrito na seção de configuração se você quiser ocultar completamente o login do Nextcloud.
Incrível! Obrigado, Patrick! Realmente aprecio a orientação.
Abri uma issue no github sobre meu problema principal, que é que eu gostaria de fazer com que todos os usuários façam login via discourse e atualmente não consigo fazer isso sem dar aos usuários instruções sobre como mudar para o discourse através da preferência do usuário social login connect.
Defini social_login_auto_redirect agora como você sugere e funcionará bem assim que todos estiverem configurados para usar o discourse. Por enquanto, funciona bem para mim pessoalmente, mas não para qualquer outra pessoa que use esses sites. Eles não poderão fazer login.
Não está 100% claro o que você quer dizer com senhas de dispositivo - olhei o link que você forneceu, mas as capturas de tela das preferências do usuário nessa página não se parecem com a minha instância do nextcloud. Talvez estejamos em uma versão diferente? Estou na 23.0.0, no canal de atualização estável. Ou talvez haja um aplicativo que eu precise instalar?
A sincronização de nome de usuário, avatar e biografia é menos urgente, embora seria bom ver funcionando corretamente. Não sei por que não seria possível atualizar esses detalhes para o usuário a cada login. Talvez haja idiossincrasias com o nextcloud que não funcionam bem com o discourse neste caso. Por exemplo, o discourse permite apenas um usuário por endereço de e-mail, enquanto parece que consigo criar um segundo usuário do nextcloud com o mesmo endereço de e-mail, a menos que eu o impeça usando a configuração de administrador Prevent creating an account if the email address exists in another account. Idealmente, ele apenas conectaria automaticamente essas contas com base no endereço de e-mail.
Não tenho certeza se entendi seu problema atual corretamente, mas presumo que seu problema sejam os usuários existentes, que não têm “conta de login social conectada”. Quando todos os usuários estiverem conectados, tudo ficaria bem?
Como você mesmo já escreveu, o e-mail não é exclusivo no Nextcloud e, portanto, não pode ser usado com segurança para mapeamento de usuários.
Quando mudei para o aplicativo sociallogin, conectei os usuários existentes com uma consulta SQL simples. Exporte a lista de usuários do Discourse e insira um mapeamento para o [nome interno]-[userid] (por exemplo, kb2-3797) para os nomes de usuário existentes do Nextcloud na tabela sociallogin_connect no banco de dados do nextcloud. Quais campos você usa para mapeamento (por exemplo, nome de usuário ou e-mail) depende da sua configuração.
A captura de tela parece um pouco desatualizada, mas tenho uma tabela muito semelhante (incluindo o “botão para criar uma nova senha específica do dispositivo”) quando abro /settings/user/security na minha instância estável do Nextcloud 23.0. Você pode postar uma captura de tela da sua página?
Não demorará muito para corrigir meus usuários existentes - tenho apenas alguns deles em meu site. Mas, em termos de uma solução de longo prazo e replicável que funcione para todos que buscam usar o discourse como provedor de autenticação para o nextcloud, parece que faria sentido permitir apenas um usuário por endereço de e-mail e combiná-los automaticamente com base no endereço de e-mail. Não deve haver necessidade de os usuários fazerem nada para que isso aconteça.
Veja como está minha página /settings/user/security.
Ok, isso faz sentido, embora a linguagem seja um pouco confusa. Acho que entendi agora. Para novos usuários que nunca fizeram login diretamente no Nextcloud e desejam instalar o aplicativo, eles precisam usar o botão Criar nova senha de aplicativo para criar uma nova “senha de aplicativo” para usá-la. Idealmente, seria uma senha por dispositivo, mas não precisa ser.
Continuarei acompanhando o GitHub para ver se posso ajudar a esclarecer a documentação e resolver alguns problemas de integração. Mas, por enquanto, eu diria que @paroga você finalmente resolveu esta solicitação de suporte de 2017!