Discourse 학습 관리 시스템 통합 (LTI 1.3 인증)

:discourse2: 요약 Discourse LTI 플러그인은 LTI 1.3 표준을 통해 Discourse가 다양한 학습 관리 시스템(LMS)과 통합할 수 있게 해줍니다.
:open_book: 설치 가이드 이 플러그인은 Discourse 코어에 번들로 포함됩니다. 별도로 설치할 필요가 없습니다.

이 플러그인은 여러 학습 관리 시스템에서 지원하는 LTI 1.3 인증 표준을 구현합니다. Discourse는 LTI 표준 내에서 “Tool(도구)” 역할을 수행합니다. 설정이 완료되면, 사용자는 학습 관리 시스템에서 버튼/링크를 클릭하여 즉시 Discourse에 로그인할 수 있습니다.

정확한 설정 방법은 사용 중인 학습 관리 시스템에 따라 달라집니다. 하지만 일반적으로 다음과 같습니다:

  1. 학습 관리 시스템에서 새로운 “Tool(도구)” 항목을 생성합니다.
  • LTI 버전: 1.3
  • Launch URL: 사이트의 아무 URL이나 지정 가능합니다. 사용자는 로그인 후 여기로 이동합니다.
  • Auth Request URL: https://<your-discourse-site>/auth/lti/initiate
  • Redirect URL: https://<your-discourse-site>/auth/lti/callback
  • Tool Public Key: 비워 둡니다. Discourse는 LMS로 데이터를 전송하지 않습니다.
  1. LMS에서 ‘Authorization endpoint(인가 엔드포인트)’, “Tool Client ID(도구 클라이언트 ID)”, “Platform Issuer ID(플랫폼 발급자 ID)” 및 "Platform Public Key(플랫폼 공개 키)"를 찾아 Discourse의 관련 사이트 설정에 추가합니다. Discourse에서 설정은 사이트 설정 UI에서 lti를 검색하여 찾을 수 있습니다.

  2. 학습 관리 시스템이 사용자 이메일이 검증되었음을 보장하는 경우, lti email verified 사이트 설정을 활성화하세요. :warning: 경고: LMS가 이메일을 검증하지 않는 경우, lti email verified를 활성화하는 것은 보안 위험을 초래할 수 있습니다.

  3. lti enabled 사이트 설정을 켜세요.

이 설명이 사용 중인 LMS에 적용되지 않는다면, 아래 주제에 게시해 주시면 최선을 다해 설명을 업데이트하겠습니다.

사이트가 invite_required인 경우 어떻게 하나요?

사용자가 처음 로그인할 때 Discourse 초대 수락 플로우를 거치도록 하려면, LTI "Custom Properties(사용자 정의 속성)"를 사용하여 Discourse 초대 링크를 지정할 수 있습니다. 신규 사용자는 초대 링크로, 기존 사용자는 일반 Launch URL로 이동합니다. 예를 들어:

속성 이름 속성 값
discourse_invite_link https://discourse.example.com/invites/abcdefg

FAQ

이 플러그인은 동시에 여러 LMS 시스템과의 통합을 지원하나요?

  • 현재 이 플러그인은 한 사이트당 하나의 LMS만 연결할 수 있도록 지원합니다. LTI client IDs 사이트 설정은 여러 값을 허용하지만, 이는 일부 LMS 시스템이 **코스(강의)**별로 클라이언트 ID를 하나씩 설정하기 때문입니다.
23개의 좋아요

Canvas LMS와의 LTI 연동을 위한 구체적인 지침이 있으신가요?

1개의 좋아요

통합 작업은 관리자가 직접 수행해야 합니다.

저는 관리자 중 한 명이자 소프트웨어 엔지니어입니다. 제가 겪고 있는 문제는 쿠키와 Discourse와 Canvas 사이의 "state"가 일치하지 않는 것과 관련이 있다고 생각합니다.

Discourse 로그에서 확인되는 오류는 다음과 같습니다.

(lti) Authentication failure! state_mismatch: StandardError, State parameter did not match the session

이 오류가 여기에서 발생한다고 생각합니다: discourse-lti/lib/discourse_lti/lti_omniauth_strategy.rb at main · discourse/discourse-lti · GitHub

이 문제를 디버깅하는 데 도움이 될 아이디어나 확인해 볼 사항이 있을까요? Canvas 문서의 이 페이지: Overview of an LTI Launch <a name="launch-overview"></a> - Canvas LMS REST API Documentation

여기에는 “쿠키 없이 시작(Launching without Cookies)” 섹션이 있는데, 이것이 이 문제와 관련이 있다고 생각합니다. 하지만 100% 확신은 하지 않습니다. 도움이 되거나 통찰을 주실 수 있다면 매우 감사하겠습니다.

Canvas에서 LTI를 작동시킬 수 있었는데, 한 가지 주의할 점이 있습니다. 제 단계는 다음과 같습니다:

  1. Canvas에서 개발자 키(Developer Key)를 생성합니다. JWK Method와 Public JWK 필드에 무엇을 입력하든 상관없습니다.

  2. Discourse LTI 설정에서 설정값을 입력합니다.

  3. 공개 키의 경우, https://<your_canvas_url>/api/lti/security/jwks 로 이동하여 두 번째 키를 복사합니다. 그런 다음 JWK to PEM Converter Online – Free | 8gwifi.org 로 가서 해당 키를 붙여넣고 변환합니다. 마지막으로 -----BEGIN/END PUBLIC KEY----- 사이에 있는 텍스트를 복사하여 Discourse LTI 설정의 Lti platform public key 항목에 붙여넣고 저장합니다.

주의할 점은 다음과 같습니다. Canvas가 생성하는 JWK는 월별로 순환되는 것 같습니다. 두 번째 키가 변경되면 LTI가 작동하지 않게 되며, 3단계를 따라 새 키로 교체해야 합니다.

Discourse LTI 플러그인은 최신 상태를 유지하려면 Public JWK URL을 지원해야 합니다.

2개의 좋아요

하나의 Discourse에 여러 LMS를 통합할 수 있나요?

:partying_face: 이 플러그인은 이제 Bundling more popular plugins with Discourse core 설명하듯 Discourse 코어에 번들링되었습니다. 자체 호스팅을 사용 중이고 해당 플러그인을 사용 중이라면, 다음 업그레이드 전에 app.yml에서 이를 제거해야 합니다.

3개의 좋아요