Hedera-Lang-Learn / hedera

MIT License
10 stars 2 forks source link

LTI and Canvas integration #188

Closed bilbe closed 4 years ago

bilbe commented 4 years ago

Goal to use LTI as authentication and group/course mechanism in preparation for fall 2020 courses, which will likely be mostly/all online at Harvard because of COVID-19.

Once Team/Groups have been added, we want to look into integrating Hedera into LMS (Learning Management Systems), e.g., Canvas, via LTI (Learning Tools Interoperability) framework. This is something we (ATG at Harvard) have done with other tools, so hopefully it won't be a huge lift, but every tool is unique and so we'll see. Things we'll want to think about:

  1. Authentication

    • Validating the LTI launch. This should be relatively straight forward with existing libraries.
    • Creating a user and/or linking to an existing user. Presumably we'll want to require an email address to be included in the data sent by LTI so that we can use that to link to and/or create an account.
    • If we create a new account for a user instead of linking to an existing account, what should we do about the password? Temporarily disable password login for that account until/unless they change their password?
  2. Group Membership

    • Should we assume 1:1 course:group mapping?
    • Should the group be created automatically by the LTI request?
    • Will we want the ability to create a group ahead of time in Hedera, and then later link that to the Canvas course?
    • What about roles? We'll need to figure out how roles should be mapped.
    • Should group membership be set once and then never updated? Or do we want to keep roles "in sync" so that every time someone access the group from Canvas, their role has changed in Canvas?
  3. Configuration & Installation in Canvas

    • We'll need to figure out how we want LTI tool installation to work.
    • The simplest thing to do is to expose a public URL with XML configuration data that can be used when adding the app manually to a Canvas course. They will just need to specify the key/secret which we could provide. We'll have to decide whether to hard-code the key/secret in the app or put it in the database.
jtauber commented 4 years ago

Lots to discuss here. We can have an initial discussion on our next call although ultimately Patrick should be involved.

arthurian commented 4 years ago

@bilbe as requested, here's an example of a context_id which is provided as part of a basic-lti-launch-request:

context_id=2a8b2d3fa51ea413d19e480fb6c2eb085b7866a9

The context_id is an opaque identifier that uniquely identifies the course in Canvas. We also get the actual canvas course ID as a custom parameter (not a standard LTI parameter, but automatically provided by Canvas):

custom_canvas_course_id=39

paltman commented 4 years ago

@arthurian @joshuagetega do you guys have any questions for me on this? I'm not sure how is best to own this issue and drive it forward but I think it's going to require all of us at some point. I'm not sure how I'd develop this locally without access to some type of LTI/Canvas test environment with credentials etc, so it probably makes more sense for me to play a supporting role of how to integrate with Django User/auth and the groups app I recently built. Thoughts?

joshuagetega commented 4 years ago

@paltman, yes, that makes sense. One would definitely need Canvas access. As such, @dodget has been working on this. I just moved the card to "In Progress".

dodget commented 4 years ago

I'll be pushing commits for this tonight, or tomorrow morning to the lti-integration branch. I need to tighten a few things up and finish writing some tests. I'll be able to demo functionality on tomorrow's call.

paltman commented 4 years ago

💯