WeBWorK Main Forum

LTI Login doesn't work after upgrade to 2.18

LTI Login doesn't work after upgrade to 2.18

by Bianca Sosnovski -
Number of replies: 2

Hi everyone,

At my college, we changed our older server (2.16) to the newest version 2.18. We had our older server  integraded with D2L (Brightspace) using LTI 1.1. The issue was that it didn't LTI grades pass back. We were told that Brightspace was not set to do it with LTI 1.1. The single logon was working fine.

So to upgrade our system to have LTI 1.3, we did the following:

1) Install WeBWorK 2.18 for Ubuntu Server 22.04 from scratch (we attempted several times to just upgrade the old system but encoutered issues that we could not resolve) 
2) Did the database dump and save a copy of /opt/webwork/courses from the old server
3) Restore the courses folder and import the database into the new server
4) use the admin course to upgrade databases

For the LTI setup with Brightspace, we followed the instructions from https://sukhjitsehra.github.io/webwork-2.18/#webwork-configuration-part-1-step-2

Registered as a standard tool  
Domain: https://webwork.qcc.cuny.edu
Redirect URLs: https://webwork.qcc.cuny.edu/webwork2/ltiadvantage/launch
OpenId Connect Login URL: https://webwork.qcc.cuny.edu/webwork2/ltiadvantage/login
Target Link URI: https://webwork.qcc.cuny.edu/webwork2
Keyset URL: https://webwork.qcc.cuny.edu/webwork2/ltiadvantage/keys

The new server is running fine but we cannot login to it via Brightspace. When using the a link posted on Brightspace, it takes to the login page (through there were few occcasion that a proxy error appeared).

I setup the debug.log to 1 and also uncomented the line to the file location in webwork2.mojolicious.yml but no debug.log has been written so far. 🤷‍♀️ 

Any suggestions about what to do to resolve this issue? 

Thank you in advance for any suggestion!

---------------

***Here are the parameters for authen_LTI.conf

#!perl 
$debug_lti_parameters = 1;
$debug_lti_grade_passback = 1;
# Authentication settings
$authen{user_module} = [
        { '*' => 'WeBWorK::Authen::LTIAdvantage' },          # first try LTI 1.3
#       { '*' => 'WeBWorK::Authen::LTIAdvanced' },           # next try LTI 1.1
        { '*' => 'WeBWorK::Authen::Basic_TheLastOption' }    # fallback authoriz                                                                                                             ation method
];
#include('conf/authen_LTI_1_1.conf');
include('conf/authen_LTI_1_3.conf');
$LTIVersion = 'v1p3';
$LTIAccountCreationCutoff = 'professor';
$LMSManageUserData = 1;
$external_auth = 0;
$permissionLevels{change_password} = 'ta';
 #$LTIGradeMode = '';
#$LTIGradeMode = 'course';
$LTIGradeMode = 'homework';
$LTIGradeOnSubmit = 1;
$LTICheckPrior = 0;
$LTIMassUpdateInterval = 3600;    #in seconds
 
################################################################################                                                                                                             ################
# Add an 'LTI' tab to the Course Configuration page
################################################################################                                                                                                             ################
@LTIConfigVariables = (
        #'LTI{v1p1}{LMS_name}',
        #'LTI{v1p3}{LMS_name}',
        #'LTI{v1p1}{LMS_url}',
        #'LTI{v1p3}{LMS_url}',
        #'external_auth',
        #'LTIGradeMode',
        #'LMSManageUserData',
        #'debug_lti_parameters'
);
 1;    # final line of the file to reassure perl that it was read properly.


***Here are the parameters for authen_1_3_LTI.conf 

 

#!perl

 #$LTI{v1p3}{LMS_name} = 'e.g., Blackboard, Canvas, Moodle, etc.';

$LTI{v1p3}{LMS_name} = 'Brightspace';

 $LTI{v1p3}{LMS_url} = 'https://brightspace.cuny.edu';

#$LTI{v1p3}{LMS_url} = 'https://myschool.edu/lms/';

 $LTI{v1p3}{preferred_source_of_username} = 'ext_d2l_orgdefinedid';

 $LTI{v1p3}{fallback_source_of_username} = 'email';

#$LTI{v1p3}{fallback_source_of_username} = https://purl.imsglobal.org/spec/lti/claim/lis#person_sourcedid;

$LTI{v1p3}{strip_domain_from_email} = 1;

$LTI{v1p3}{lowercase_username} = 0;

 $LTI{v1p3}{preferred_source_of_student_id} = 'ext_d2l_orgdefinedid';

 

$LTI{v1p3}{PlatformID}      = 'https://brightspace.cuny.edu';

$LTI{v1p3}{ClientID}        = 'a2adccd2-3a39-48f4-9740-dfa12ba26dfe';

$LTI{v1p3}{DeploymentID}    = 'b42ae0ba-a627-4aab-91c0-c600733bbaaa';

$LTI{v1p3}{PublicKeysetURL} = 'https://brightspace.cuny.edu/d2l/.well-known/jwks';

$LTI{v1p3}{AccessTokenURL}  = 'https://auth.brightspace.com/core/connect/token';

$LTI{v1p3}{AccessTokenAUD}  = 'https://api.brightspace.com/auth/token';

$LTI{v1p3}{AuthReqURL}      = 'https://brightspace.cuny.edu/d2l/lti/authenticate';

$LTI{v1p3}{StateKeyLifetime} = 60;    # in seconds

 $LTI{v1p3}{LMSrolesToWeBWorKroles} = {

        'librarian'               => 'guest',

        'observer'                => 'guest',

        'visitor'                 => 'guest',

        'Guest'                   => 'guest',

        'Administrator'           => 'professor',

        'Designer'                => 'professor',

        'instructor'              => 'professor',

        'Instructor'              => 'professor',

        'Faculty'                 => 'professor',

        'Teacher'                 => 'professor',

        'Student'                 => 'student',

        'Learner'                 => 'student',

        'student'                 => 'student',

        'AI/TA'                   => 'ta',

        'TA'                      => 'ta',

        'Teaching Assistant'      => 'ta',

        'Teaching Assistant (TA)' => 'ta',

        'Non-editing teacher'     => 'ta',

        'Grader'                  => 'ta',

};

 

################################################################################################

# Local routine to modify users

################################################################################################

 

# When users are added to the system WeBWorK will do its best to fill out user information.

# However, institutions can add code to the following routine to set fields not normally set by

# WeBWorK.  E.G.  The student ID field.

 

#$LTI{v1p3}{modify_user} = sub {

#  # The self object from LTIAdvantange.pm

#  my $self = shift;

#  # The user object to be modified

#  my $user = shift;

#

#  # Parse context_id for additional information.  E.G.

#  my @course_id = split /-/, $self->{context_id};

#  $user->{section} = $course_id[4];

#};

 

################################################################################################

# Local routine to modify user sets

################################################################################################

 

# When users are added to the system they are also assigned all visible sets This routine can be

# used to modify the sets before they are assigned.  E.g. extend due dates based off the number

# of problems students have to do.

 

#$LTI{v1p3}{modify_user_set} = sub {

#  # The self object from LTIAdvantange.pm

#  my $self      = shift;

#  my $globalSet = shift;

#  # The userSet object to be modified

#  my $userSet = shift;

#

#  my $numberOfSetsAssigned   = $self->{numberOfSetsAssigned};

#  my $daysPerSetMakeup       = 2;

#  my $reasonableNumberOfDays = $numberOfSetsAssigned * $daysPerSetMakeup + 1;

#  if ($reasonableNumberOfDays < 2) { $reasonableNumberOfDays = 2; }

#  my $niceDueTime    = $globalSet->due_date + $reasonableNumberOfDays * 86400;

#  my $niceAnswerTime = $niceDueTime + 600;

#

#  $userSet->due_date($niceDueTime);

#  $userSet->answer_date($niceAnswerTime);

#};


##### NOTE: The following was used in the older system and we didn't change in the upgrade. 

# modification of the above to pull info from Bb to fill info into WW

$LTI_modify_user = sub {

  # The self object from LTIAdvanced.pm

  my $self = shift;

  # The user object to be modified

  my $user = shift;

 

  # Parse context_id for additional information.  E.G.

  my $r = $self ->{r};

  my @course_id=split /\s/, $r->param("context_title");

  $user->{"section"} = $course_id[-5].' '.$course_id[-4].' '.$course_id[-3];

  $user->{"recitation"} = $course_id[0].' '.$course_id[1];

 

  };

 # Do not change this.

$LTI{v1p3}{grader} = 'WeBWorK::Authen::LTIAdvantage::SubmitGrade';

 

1;    # final line of the file to reassure perl that it was read properly.

 

 

 

 

 

 

 



In reply to Bianca Sosnovski

Re: LTI Login doesn't work after upgrade to 2.18

by Danny Glin -
The current version of WeBWorK is 2.19, so I'd recommend going with that if possible.  The upgrade from 2.18 to 2.19 is relatively straightforward, and 2.19 provides some improvements to LTI integration.  In particular the content selection tool makes creating links much easier.  If you're working on a new server and have the option, I'd also recommend going with Ubuntu 24.04.

More recent instructions for integration with D2L Brightspace can be found at https://webwork.maa.org/wiki/Desire2Learn_Brightspace_LTI_1.3_Configuration, though the instructions you linked will probably still work.

Here are a couple of things to check:
  • Are you using another authentication module (e.g. LDAP, CAS)?  If so, you have to make sure that you set up the authentication modules correctly in the last place that they are set.  For example, if you are using LDAP and LTI you will have to edit authen_ldap.conf and replace the $authen{user_module} section with:
    $authen{user_module} = [
    { '*' => 'WeBWorK::Authen::LTIAdvantage' },
    { '*' => 'WeBWorK::Authen::LDAP' }
    ];
  • There are ongoing issues with LTI links that open within an iframe, so you should make sure that you select "Open as External Resource" for any links in D2L to ensure that they open in a new window.


In reply to Danny Glin

Re: LTI Login doesn't work after upgrade to 2.18

by Bianca Sosnovski -
Hi Danny,

Thank you for your reply. My apologies for the oversight. We started the installation of the 2.18 server back in September 2024, but for various reasons, we've only just completed the transition. Unfortunately, we missed the release of a newer version.

For now, we'll likely try to use LTI 1.1 to integrate with the new server (🤞). If that doesn’t work, we’ll revert to manually creating user accounts until we can arrange another upgrade.

Thank you for the clear instructions you provided—they’re much appreciated.