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

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! :seedling:

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. :slight_smile: Any guidance along the way much appreciated.

https://docs.nextcloud.com/server/11/admin_manual/configuration_server/sso_configuration.html

i’ve quite the same usecases, where i want to use discourse as the SSO provider for nextcloud.

are there any updates on this?

Not that I am aware of. Could you ask at the nextcloud community?

it’s not a perfect implementation, but it does its job for me:

https://github.com/paroga/user_discourse

소셜 로그인 앱은 4.10 버전부터 디스코스를 지원합니다.

좋네요! Nextcloud의 소셜 로그인 앱에서 Discourse가 "내장 OAuth 제공자"로 제공되지 않는다는 걸 확인했습니다. Discourse를 이용해 이 설정을 할 수 있는 다양한 방법이 있는데, 어떻게 설정하셨나요? 레시피를 공유해 주실 수 있을까요?

또한, 해당 앱이 인증 제공자로부터 그룹을 상속할 수 있는 기능도 있어서 꽤 마음에 듭니다. 제 Discourse/Nextcloud 환경에서도 이 기능을 사용할 수 있으면 좋겠습니다.

여기서 관련이 있을 것 같은 다른 Nextcloud 앱들도 있지만, 모두 테스트해 보지는 않았습니다. OpenID Connect Login 앱이 있고, Discourse SSO 앱도 있지만, 오래되었거나 테스트가 되지 않은 것으로 보입니다.

제 게시물에 적어 둔 대로 4.10 버전이 필요합니다. 그러면 소셜 로그인 설정에 “Custom Discourse” 옵션이 나타납니다.

이 앱은 OpenID Connect만 지원하는데, 이는 Discourse에서 제공되지 않는 기능입니다.

그것은 반대 방향, 즉 Nextcloud 계정으로 Discourse에 로그인하려는 경우를 위한 것입니다.

패트릭, 감사합니다! 방금 앱을 다시 설치했는데 “Custom Discourse” 옵션이 보입니다. 문서에서 아직 설명이 없어서 아무것도 변경되지 않은 줄 알았어요. 또한 https://apps.nextcloud.com/apps/sociallogin 페이지에는 Nextcloud 지원 포럼의 깨진 링크가 있어서 이 앱에 대해 개발자와 논의할 방법을 찾기가 어렵습니다.

이제 앱이 작동하지만, 가장 큰 문제는 기존 모든 사용자에게 기본적으로 Discourse 로그인만 허용하도록 설정하는 방법을 알지 못한다는 것입니다.

두 번째로 큰 문제는 사용자 정보가 Discourse에서 Nextcloud로 올바르게 전달되지 않는다는 점입니다. Nextcloud에서 새로 생성된 사용자는 [내부 이름]-[사용자 ID] 형식의 자동 생성된 사용자명을 갖게 되며, 제 사이트의 경우 예를 들어 kb2-3797과 같습니다. 이름은 전달되지만, 다른 프로필 세부 정보는 Nextcloud에서 다시 입력해야 합니다. 아바타도 전달되지 않습니다.

또한, Nextcloud 웹 앱의 유일한 로그인 방법이 이 방식이라면 데스크톱 또는 모바일 클라이언트에서 사용자가 사용자명과 비밀번호를 어떻게 설정하는지 궁금합니다. 아마도 Nextcloud 웹 앱의 계정 설정으로 들어가서 Nextcloud 로그인 자격 증명을 설정해야 할 것 같습니다.

다른 몇 가지 관찰 사항:

  • 앱 설정은 apps 섹션이 아니라 관리 설정 사이드바를 통해 접근합니다. 찾는 데 시간이 좀 걸렸어요. :slight_smile:
  • 앱 관리 설정에는 세 개의 섹션이 있으며, 상단과 하단 섹션에는 저장 버튼이 있지만 중간 섹션(커스텀 제공자용)에는 없습니다. 커스텀 Discourse 설정을 저장하려면 어떤 버튼을 사용해야 하는지 명확하지 않습니다. 답변: 둘 다 동일한 방식으로 작동합니다.
  • 앱 설정이 많습니다. 제 환경에서 가장 잘 작동하는 설정은 다음과 같습니다:
    • disable auto create new users = Discourse에 존재하는 사용자가 Nextcloud에서 생성되도록 허용
    • create users with disabled account = 새로 생성된 사용자를 비활성화하지 않음
    • allow users to connect social logins with their account = 기존 사용자가 Discourse 로그인을 선택하도록 허용 (:warning: 사용자가 기본적으로 Discourse로 로그인하도록 허용하는 방법을 찾지 못함)
    • update user profile every login = 로그인할 때마다 Discourse 그룹을 Nextcloud 그룹과 동기화 (:warning: 사용자명, 이름, 소개 및 기타 프로필 정보를 올바르게 동기화하지 못함)
    • do not prune not available user groups on login (:warning: 이 설정이 무엇을 하는지 모르지만 기본적으로 활성화되어 있습니다. Discourse에서 매핑되지 않은 경우 사용자가 기존 Nextcloud 그룹에서 제거되는 것을 방지하는 것 같습니다?)
    • automatically create groups if they do not exist = 비활성화 (원하지 않는 그룹을 복제하여 보기 흉한 그룹 이름을 생성하므로)
    • restrict login for users without mapped groups = 비활성화
    • restict login for users without assigned groups = 비활성화
    • disable notify admins about new users = 비활성화 (새로운 Nextcloud 사용자가 생성될 때 확인하는 것이 저에게 유용하므로)
    • hide default login = 사용자가 Discourse를 통해 로그인하도록 유도하지만, 여전히 Nextcloud 사용자명/이메일과 비밀번호로 직접 로그인할 수 있습니다.
  • 그룹 매핑을 생성하기 전에 처음 시도했을 때 즉시 관리자 액세스를 잃었습니다. 다시 얻기 위해 명령줄로 가서 occ group:adduser admin USERNAME을 실행해야 했습니다.
  • 그룹 매핑은 아주 잘 작동합니다! 가장 중요했던 것은 포럼의 관리자가 Nextcloud에서도 관리자 권한을 가질 수 있도록 admins → Nextcloud admin 매핑을 추가한 것입니다. 또한 보안 카테고리에 사용되는 그룹에 대한 매핑을 추가하여, 해당 보안 카테고리와 관련된 Nextcloud의 보안 폴더에 대한 액세스 권한도 부여할 수 있었습니다.

점점 가까워지고 있습니다!

GitHub를建议使用합니다.

IMHO(개인적 의견)로는 이것이 구현하기에 가장 좋은 방법이라고 생각합니다. ID는 주로 내부적으로 사용되며 일반 사용자에게 여러 곳에서 보이지 않기 때문입니다.
Nextcloud에는 사용자를 쉽게 이름 변경할 수 있는 방법이 없지만, Discourse에는 있습니다. Discourse에서 사용자를 이름 변경하면 이름이 더 이상 일치하지 않을 경우 Nextcloud에서 이상한 동작이 발생할 수 있습니다.

DiscourseConnect의 avatar_url은 Nextcloud로 전달되고 거기에서 읽혀야 합니다. bio도 전달하려면 프로필 업데이트를 담당하는 브랜치에 몇 줄만 추가하면 됩니다.

대신 기기 비밀번호를 사용해야 합니다. Nextcloud 비밀번호가 Discourse 비밀번호와 다를 수 있으며, 이는 혼란을 초래하고 SSO를 우회하게 됩니다.

이것들은 앱 특유의 문제라기보다 Nextcloud UI의 일반적인 문제라고 생각합니다.

Nextcloud 로그인을 완전히 숨기고 싶다면 설정 섹션에 설명된 대로 social_login_auto_redirect 옵션을 true로 설정하십시오.

완벽해요! Patrick, 감사합니다! 조언 정말 감사드립니다.

제 주요 문제와 관련하여 github에서 이슈를 열었습니다. 문제는 모든 사용자에게 discourse를 통해 로그인하도록 하고 싶은데, 현재는 social login connect 사용자 설정을 통해 discourse로 전환하는 방법을 사용자에게 안내해 주지 않으면 그렇게 할 수 없다는 것입니다.

제안해 주신 대로 social_login_auto_redirect를 설정했는데, 모든 사용자가 discourse 사용을 설정한 후에는 잘 작동할 것입니다. :+1: 하지만 현재로서는 저 개인에게는 잘 작동하지만, 이 사이트들을 사용하는 다른 사람들에게는 작동하지 않습니다. 그들은 로그인을 허용받지 못할 것입니다. :sob:

'기기 비밀번호’가 정확히 무엇을 의미하는지 100% 이해가 안 됩니다. 제공해 주신 링크를 확인했는데, 그 페이지의 사용자 설정 스크린샷은 제 nextcloud 인스턴스와 다르게 보입니다. 혹시 다른 버전을 사용하고 있는 건가요? 저는 안정 업데이트 채널의 23.0.0 버전을 사용하고 있습니다. :thinking: 아니면 설치해야 할 앱이 있는 건가요?

사용자 이름, 아바타, 자기소개 동기화는 덜 시급한 문제이지만, 정상적으로 작동하는 모습을 보고 싶기는 합니다. 왜 각 로그인 시마다 이러한 사용자 세부 정보를 업데이트할 수 없는지 모르겠습니다. 아마도 이 경우 nextcloud와 discourse가 잘 맞지 않는 특이점이 있는 것 같습니다. 예를 들어, discourse는 이메일 주소당 한 명의 사용자만 허용하는 반면, 이메일 주소가 다른 계정에 존재하는 경우 계정 생성 방지 관리자 설정으로 이를 방지하지 않는 한 같은 이메일 주소로 두 번째 nextcloud 사용자를 생성할 수 있는 것 같습니다. 이상적으로는 이메일 주소를 기반으로 이러한 계정을 자동으로 연결해 주면 좋겠습니다.

현재 문제를 정확히 이해하고 있는지 확실하지 않지만, 문제가 "연결된 소셜 로그인 계정"이 없는 기존 사용자들 때문이라고 가정해 보겠습니다. 모든 사용자가 연결되어 있다면 모든 것이 정상일까요?

본인이 이미 작성하신 대로, 이메일은 Nextcloud에서 고유하지 않으므로 사용자 매핑에 안전하게 사용할 수 없습니다.

sociallogin 앱으로 전환할 때, 저는 간단한 SQL 쿼리를 사용하여 기존 사용자를 연결했습니다. Discourse 사용자 목록을 내보내고, [내부 이름]-[userid] (예: kb2-3797)에 대한 매핑을 Nextcloud 데이터베이스의 sociallogin_connect 테이블에 기존 Nextcloud 사용자 이름과 함께 삽입했습니다. 매핑에 사용할 필드(예: 사용자 이름 또는 이메일)는 설정에 따라 달라집니다.

스크린샷이 약간 오래된 것 같지만, 제 Nextcloud 23.0 안정판 인스턴스에서 /settings/user/security를 열면 매우 유사한 테이블(새로운 기기별 비밀번호를 생성하는 “버튼” 포함)이 표시됩니다. 해당 페이지의 스크린샷을 게시해 주시겠습니까?

기존 사용자들을 수정하는 데는 시간이 오래 걸리지 않을 것입니다. 제 사이트에는 사용자들이 몇 명밖에 없으니까요. 하지만 Nextcloud에서 Discourse를 인증 제공자로 사용하려는 모든 사람에게 적용할 수 있는 장기적이고 재현 가능한 솔루션이라는 측면에서는, 이메일 주소당 한 명의 사용자만 허용하고 이메일 주소 기반으로 자동으로 매칭하는 것이 합리적일 것 같습니다. 사용자가 이를 위해 별도로 무언가를 할 필요가 없어야 합니다.

제 /settings/user/security 페이지는 다음과 같습니다.

페이지 맨 아래에 "새 앱 비밀번호 만들기"가 있습니다. 여기서 데스크톱 클라이언트 등에 사용할 새 자격 증명을 생성할 수 있습니다.

네, 이해가 가긴 합니다. 다만 설명이 좀 헷갈리네요. 이제야 파악이 된 것 같습니다. Nextcloud에 직접 로그인해 본 적이 없는 신규 사용자가 앱을 설치하려면, 새 앱 비밀번호 만들기 버튼을 사용해 해당 앱에 사용할 새로운 "앱 비밀번호"를 생성해야 합니다. 이상적으로는 기기마다 하나의 비밀번호를 사용하는 것이 좋지만, 반드시 그럴 필요는 없습니다.

앞으로도 GitHub에서 계속 주시하면서 문서가 더 명확해지도록 돕고, 통합 관련 문제들이 해결되도록 노력하겠습니다. 하지만 지금은 @paroga님이 2017년부터 이어져 온 이 지원 요청을 마침내 해결하셨다고 말씀드리고 싶습니다! :partying_face:

제가 작성한 튜토리얼을 참고해 보시면 좋겠습니다.

이 기능을 사용하여 NextCloud를 Discourse에 연결하고 있습니다.