Has anyone succeeded in using discourse as sso provider for nextcloud? Share recipe?

Я бы предложил GitHub.

На мой взгляд, это лучший способ реализации, так как идентификатор используется преимущественно внутри системы и не отображается обычным пользователям во многих местах.
В Nextcloud нет простого способа переименовать пользователей, а в Discourse — есть. Переименование пользователя в Discourse может привести к странному поведению с Nextcloud, если имена больше не совпадают.

avatar_url из DiscourseConnect должен передаваться в Nextcloud и читаться там. Если вы хотите передавать также bio, достаточно добавить несколько строк в ветке, отвечающей за обновление профиля.

Вместо этого следует использовать пароли устройств. Пароль Nextcloud может отличаться от пароля Discourse, что приведёт к путанице и обойдёт SSO.

Я считаю, что это общие проблемы интерфейса Nextcloud, а не специфичные для приложения.

Чтобы полностью скрыть вход в Nextcloud, установите опцию social_login_auto_redirect в значение true, как описано в разделе конфигурации.