검증 가능한 자격 증명 플러그인

요약: 검증 가능 자격 증명(Verifiable Credentials)을 사용하여 Discourse에서 그룹과 배지에 대한 액세스를 부여합니다.

:link: GitHub: https://github.com/coopcreds/discourse-verifiable-credentials
:arrow_right: 설치: 플러그인 설치 가이드를 따르세요.

데모

아래 링크의 단계를 따라 이 플러그인을 직접 사용해 볼 수 있습니다. 테스트용 "Cooperative Credential"이 발급되며, 이를 사용하여 cooperative credentials Discourse 인스턴스에서 그룹에 액세스하고 배지를 받을 수 있습니다. 참고로 이 자격 증명은 테스트 목적으로만 사용되며, 사전 통보 없이 폐기될 수 있습니다.

https://coopcreds.com/test/

제공자(Providers)

이 플러그인은 현재 다음 검증 가능 자격 증명 제공자를 지원합니다.

제공자 검증 유형 지원 여부
MATTR OIDC 예
MATTR 콜백 예
Verifiable Credentials Ltd - 부분적

이 플러그인은 모든 제공자를 지원하도록 구축되었지만, 추가 제공자를 도입하려면 일부 구현 작업이 필요합니다. 다른 제공자를 추가하고 싶다면 연락해 주세요.

설정(Configuration)

이 플러그인을 사용하려면 검증 가능 자격 증명에 대한 기본적인 이해가 필요합니다. 현재 이 플러그인이 지원하는 주요 제공자인 MATTR는 현재 플러그인 옵션과 관련된 몇 가지 영상을 제작했습니다:

이 플러그인은 사용자의 자격 증명을 검증하여 Discourse에서 그룹 또는 배지에 대한 액세스를 부여할 수 있습니다. 아래 섹션에서는 검증, 그룹 및 배지 설정을 설명합니다. 현재 이 플러그인은 MATTR만 지원하므로, 설명에서는 MATTR을 사용한다고 가정합니다.

검증자(Verifier)

사용하는 검증자 설정 유형은 통합하려는 시스템의 종류에 따라 달라집니다. 검증자로서 직접 관리하는 Discourse를 설정하고 있다면 콜백 검증을 사용하는 것이 좋습니다. 단일 검증자에 의존하는 네트워크의 일부, 즉 "신뢰 당사자(Relying Party)"라면 OIDC 검증을 사용하는 것이 좋습니다.

OIDC

OIDC 검증자(예: MATTR Auth0 Integration 사용)를 사용하는 경우 다음 사이트 설정을 수행해야 합니다:

  • verifiable credentials oidc: true
  • verifiable credentials mattr verifier id: OIDC 검증자의 id (DID가 아님)
  • verifiable credentials mattr client id: Discourse용 OIDC 클라이언트 애플리케이션의 클라이언트 id (MATTR 테넌트 클라이언트 id가 아님)
  • verifiable credentials mattr client secret: Discourse용 OIDC 클라이언트 애플리케이션의 클라이언트 시크릿 (MATTR 테넌트 클라이언트 시크릿이 아님)

콜백

표준 콜백 검증을 사용하는 경우 다음 사이트 설정을 수행해야 합니다:

  • verifiable credentials oidc: false
  • verifiable credentials mattr client id: 검증자가 호스팅되는 MATTR 테넌트의 클라이언트 id
  • verifiable credentials mattr client secret: 검증자가 호스팅되는 MATTR 테넌트의 클라이언트 시크릿
  • verifiable credentials mattr messaging did: keyType이 ed25519인 DID

그룹

검증된 자격 증명 내의 클레임(claims)을 사용하여 그룹에 대한 액세스를 부여할 수 있습니다. 이는 사용자의 자격 증명 내 클레임에 따라 Discourse에서 서로 다른 그룹에 선택적으로 액세스를 부여할 수 있음을 의미합니다. 검증 가능 자격 증명을 통해 액세스할 수 있도록 그룹을 설정하려면 “관리(Manage)” > "구성원(Membership)"으로 이동하여 다음을 설정하세요.

  • Allow users to join by verifiable credentials: true

  • Show verifiable credentials button on this group to non members: (명백함)

  • Redirect users to url upon verification.: 예를 들어 자격 증명을 사용하여 사용자가 그룹이 액세스할 수 있는 카테고리에 액세스하도록 하는 경우, 검증 프로세스가 완료되면 사용자를 해당 카테고리로 보내기 위해 이 필드를 사용하세요.

  • Cumulative list of claim(s) that grants access to this group. Format: key:value.: 이 목록은 누적적이므로, 액세스를 얻으려면 사용자의 자격 증명에 모든 클레임이 존재해야 합니다. 예시

    https://coopcreds.com/cooperativeMembershipType:member
    https://coopcreds.com/cooperative:pavilion
    

콜백

콜백 검증 방식을 사용하는 경우, 해당 그룹에 액세스를 부여하는 자격 증명의 식별자(Identifier of credential that grants access to this group)를 해당 그룹에 사용하려는 프레젠테이션 템플릿의 id로 설정해야 합니다. 서로 다른 그룹에 서로 다른 프레젠테이션 템플릿을 사용할 수 있습니다.

배지(Badge)

검증된 자격 증명 내의 클레임을 사용하여 사용자에게 배지를 부여할 수 있습니다. 현재 헤더 컴포넌트(아래 참조)를 사용하여만 이 작업을 수행할 수 있습니다. 사용할 사이트 설정은 verifiable credentials header badges이며, 이 형식의 항목이 필요합니다:

badge_id~~claim:value

예를 들어

34~~https://coopcreds.com/cooperativeMembershipType:member

배지 페이지의 URL에서 배지 id를 확인할 수 있습니다. 예:

/badges/9/autobiographer ## 배지 id는 9입니다

헤더(Header)

플러그인의 헤더 드롭다운을 사용하여 사용자에게 여러 그룹에 동시에 액세스 권한을 부여하거나, 배지와 그룹을 동시에 부여할 수 있습니다. 관련 설정은 다음과 같습니다:

  • verifiable credentials header: true
  • verifiable credentials header groups: 그룹 이름 목록 (각 그룹은 이미 설정되어 있어야 함; 위 참조)
  • verifiable credentials header badges: 위 참조
  • verifiable credentials header info url: 드롭다운 우측 하단의 “자세히 알아보기” 링크용 url.

사용자가 헤더 프레젠테이션에 포함된 그룹의 구성원이 아니거나, 헤더 프레젠테이션에 포함된 배지를 부여받지 않은 경우 헤더 아이콘이 표시됩니다. 사용자가 클릭하면 자격 증명을 검증하여 액세스할 수 있는 리소스가 표시됩니다.

지원(Support)

이 플러그인은 Cooperative Credentials Project의 일환으로 구축되었으며, EU가 지원하는 ESSIF Lab의 지원을 받고 있습니다. 올해 말에 공식 출시될 때 Cooperative Credentials 네트워크의 여러 신뢰 당사자들이 프로덕션 환경에서 이를 사용할 예정입니다.

image           image

할 일(To do)

  • 그룹별 배지 지원 추가.
  • 검증 가능 자격 증명을 통한 사용자 인증 지원.
  • Evernym 및 Trinsic와 같은 추가 제공자 추가.
16개의 좋아요

이것은 순수하게 기술적인 노트이지만, 이 플러그인이 (부분적으로) 수행하는 작업(즉, OIDC를 검증 가능한 자격 증명(Verifiable Credentials)과 통합하는 것)에 관한 표준 논의에 관심이 있다면, 최근 W3C CCG 그룹 메일링 리스트에서 올라온 이 스레드를 읽어보는 것이 좋습니다(특히 Manu와 MATTR의 CTO인 Tobias 간의 논의 부분).

(이런 논의들이 discourse 인스턴스에서 이루어졌으면 좋겠습니다…)

6개의 좋아요

이 플러그인은 소비자(consumer)로만 작동한다는 말씀이 맞는 건가요?

Discourse 인스턴스 하나가 다른 Discourse 인스턴스에 대한 자격 증명 제공자(credential provider) 역할을 할 수 있을지 궁금합니다.

네, 맞습니다.

아니요, 외부 제공자가 필요합니다. 예를 들어 https://mattr.global/ 을 사용하는 제공자 등이 있죠.

1개의 좋아요