Я бы предложил GitHub.
На мой взгляд, это лучший способ реализации, так как идентификатор используется преимущественно внутри системы и не отображается обычным пользователям во многих местах.
В Nextcloud нет простого способа переименовать пользователей, а в Discourse — есть. Переименование пользователя в Discourse может привести к странному поведению с Nextcloud, если имена больше не совпадают.
avatar_url из DiscourseConnect должен передаваться в Nextcloud и читаться там. Если вы хотите передавать также bio, достаточно добавить несколько строк в ветке, отвечающей за обновление профиля.
Вместо этого следует использовать пароли устройств. Пароль Nextcloud может отличаться от пароля Discourse, что приведёт к путанице и обойдёт SSO.
Я считаю, что это общие проблемы интерфейса Nextcloud, а не специфичные для приложения.
Чтобы полностью скрыть вход в Nextcloud, установите опцию social_login_auto_redirect в значение true, как описано в разделе конфигурации.