Skip to content

Tier 1: Submission Review, JWKS publishing, Dynamic Registration#237

Open
srijken wants to merge 18 commits intomasterfrom
feature/lti-tier1
Open

Tier 1: Submission Review, JWKS publishing, Dynamic Registration#237
srijken wants to merge 18 commits intomasterfrom
feature/lti-tier1

Conversation

@srijken
Copy link
Copy Markdown
Contributor

@srijken srijken commented May 3, 2026

Summary

Adds three independently-shippable LTI 1.3 / Advantage features that the library lacked, organized into three tagged phases:

  • Phase A — LTI Submission Review 1.0 (phase-a-submission-review): new LtiSubmissionReviewRequest message type, for_user claim, and submissionReview extension on AGS LineItem. Spec: https://www.imsglobal.org/spec/lti-sr/v1p0
  • Phase B — JWKS publishing (phase-b-jwks): JwksControllerBase publishing /.well-known/jwks.json anonymously, backed by an IJwksKeyStore abstraction with documented key-rotation contract.
  • Phase C — LTI Dynamic Registration 1.0 (phase-c-dynamic-registration): POCO models for PlatformOpenIdConfiguration / ToolConfiguration (RFC 8414 + RFC 7591 + LTI extension claims), tool-side HttpClient extensions for the discovery → registration handshake, and platform-side DynamicRegistrationControllerBase. Spec: https://www.imsglobal.org/spec/lti-dr/v1p0

Test count goes from 47 → 61 (+14 new tests, all passing on net10.0). No breaking API changes — every modification to existing types is purely additive.

Plan and Tier 2/3 deferred-work roadmap are in docs/superpowers/plans/.

Test plan

  • CI runs dotnet test on net8.0 (developed on a box with only net10.0 SDK; local runs are 61/61 green on net10.0)
  • LtiSubmissionReviewRequest round-trips through reference JSON
  • JwksControllerBase publishes JWKS and does not leak private RSA parameters
  • DynamicRegistrationControllerBase returns 403 on wrong scope and 201 on the registration scope
  • HttpClientDynamicRegistrationExtensions surfaces 4xx response bodies in the exception
  • No existing AGS / NRPS / Deep Linking tests regressed

srijken added 18 commits May 3, 2026 17:42
…registration

Add GetPlatformOpenIdConfigurationAsync and RegisterToolAsync extension
methods to HttpClient implementing the tool side of LTI Dynamic
Registration 1.0 (Task C4). Adds project reference from
LtiAdvantage.IdentityModel to LtiAdvantage core (required for the
DynamicRegistration models), and from the unit-test project to
LtiAdvantage.IdentityModel.
Adds the platform-side LTI Dynamic Registration 1.0 endpoint as an
abstract MVC controller base, matching the pattern used by
MembershipControllerBase. The endpoint enforces the
https://purl.imsglobal.org/spec/lti-reg/scope/registration scope via
[Authorize] policy and delegates persistence to OnRegisterAsync, which
implementations override to assign the client_id.

Includes a TestServer integration test covering the success path
(201 + assigned ClientId) and the insufficient-scope path (403).
@srijken srijken force-pushed the feature/lti-tier1 branch 2 times, most recently from d04342a to bb05069 Compare May 3, 2026 17:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant