讲师中心 微信公众号
AI工具推荐 视频效率加速

在 LTI 1.3 环境中安全获取用户身份与角色信息的完整实践指南

夜晨同学_2110

夜晨同学_2110

发布时间:2026-09-27 11:22:30

|

424人浏览过

|

来源于php中文网

原创

在 LTI 1.3 环境中安全获取用户身份与角色信息的完整实践指南

本文详解 LTI 1.3 工具中获取用户身份(如姓名、角色、邮箱)和课程成员信息的两种标准方式:通过 Launch JWT 解析用户声明,以及调用 Names and Role Provisioning Service(NRPS)获取完整上下文成员列表,并说明 auth.php 与 token.php 的核心作用及正确 scope 配置方法。

本文详解 lti 1.3 工具中获取用户身份(如姓名、角色、邮箱)和课程成员信息的两种标准方式:通过 launch jwt 解析用户声明,以及调用 names and role provisioning service(nrps)获取完整上下文成员列表,并说明 `auth.php` 与 `token.php` 的核心作用及正确 scope 配置方法。

在构建符合 IMS Global LTI 1.3 标准的学习工具时,准确、安全地获取用户身份与课程上下文信息是实现个性化体验(如自动创建 OneNote 笔记本、同步成绩、权限控制)的前提。许多开发者(尤其是初次集成 Moodle 或其他 LMS 的开发者)容易混淆两个关键端点 auth.php 和 token.php 的职责,或误以为需手动调用 /token.php 即可直接获取用户数据——这恰恰违背了 LTI 1.3 的安全设计原则。

✅ 正确路径一:从 Launch JWT 中提取基础用户身份

LTI 1.3 的启动流程(OpenID Connect Launch)是整个集成的起点。当教师在 LMS(如 Moodle)中点击你的工具链接时,LMS 会向你的工具发起一个 JWT 签名的 POST 请求(通常发往你的 launch.php 或 /login 端点),该 JWT 已由 LMS 使用其私钥签名,并包含一组标准化的用户身份声明(Claims)。

你无需额外调用 token.php 即可获得以下关键用户信息(均位于 JWT Payload 中):

{
  "https://purl.imsglobal.org/spec/lti/claim/user_id": "12345",
  "https://purl.imsglobal.org/spec/lti/claim/roles": [
    "http://purl.imsglobal.org/vocab/lis/v2/membership#Instructor"
  ],
  "https://purl.imsglobal.org/spec/lti/claim/name": "Jane Doe",
  "https://purl.imsglobal.org/spec/lti/claim/given_name": "Jane",
  "https://purl.imsglobal.org/spec/lti/claim/family_name": "Doe",
  "https://purl.imsglobal.org/spec/lti/claim/email": "jane.doe@school.edu",
  "https://purl.imsglobal.org/spec/lti/claim/context": {
    "id": "course-789",
    "label": "Biology 101",
    "title": "Introductory Biology"
  }
}

✅ 操作建议:

  • 在你的 Launch 处理逻辑中,使用标准 JWT 库(如 firebase/php-jwt 或 Python 的 PyJWT)验证并解析该 JWT;
  • 严格校验 iss(issuer)、aud(audience)、exp(过期时间)及签名;
  • 直接读取上述 claim 字段,即可完成用户身份识别与课程上下文绑定。

⚠️ 注意:auth.php 是 LMS 内部用于 OpenID Connect 授权码交换的端点(即 OIDC Authorization Endpoint),不应由工具端主动调用。它由 LMS 在 Launch 流程中内部调用 Identity Provider(如 Microsoft Entra ID)完成认证。你作为工具开发者,只需正确配置 .well-known/openid-configuration 并处理好 Launch JWT 即可。

✅ 正确路径二:通过 NRPS 服务获取完整成员列表

若需获取当前课程中所有学生、助教、教师的详细信息(例如为 OneNote 课堂笔记本批量创建页面、设置文件协作权限),则需调用 LTI 的 Names and Role Provisioning Service(NRPS)。

该服务要求:

  1. 先获取访问令牌(Access Token):调用 LMS 提供的 Token Endpoint(如你本地的 https://localhost/mod/lti/token.php),但必须携带正确的 scope;
  2. 使用该 Token 调用 NRPS 成员接口。

? 关键:Scope 必须显式声明

你提到“未提供 scope 导致无法获取用户详情”,这正是核心问题。NRPS 的标准只读 scope 为:

https://purl.imsglobal.org/spec/lti-nrps/scope/contextmembership.readonly

因此,向 token.php 发起请求时,scope 参数不可省略,且必须精确匹配(大小写敏感)。示例请求体(application/x-www-form-urlencoded):

grant_type=client_credentials
client_id=your_tool_client_id
client_secret=your_tool_client_secret
scope=https://purl.imsglobal.org/spec/lti-nrps/scope/contextmembership.readonly

✅ 成功响应后,你将获得一个短期有效的 Bearer Token,随后即可调用 NRPS 成员端点(URL 通常在 Launch JWT 的 https://purl.imsglobal.org/spec/lti-nrps/claim/names_roles_service 声明中提供):

curl -X GET \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  "https://localhost/mod/lti/nrps/membership?limit=100"

响应示例:

{
  "members": [
    {
      "status": "Active",
      "user_id": "12345",
      "name": "Jane Doe",
      "email": "jane.doe@school.edu",
      "roles": ["Instructor"],
      "picture": "https://..."
    }
  ]
}

? 为什么不要注释掉 scope 或绕过规范?

  • 注释 token.php 中的 scope 校验(如你所做)会破坏 LTI 安全模型,导致令牌无明确权限边界,LMS 可能拒绝后续服务调用;
  • LTI 1.3 强制基于 scope 的最小权限原则(Principle of Least Privilege),未声明 contextmembership.readonly,NRPS 接口将返回 403 Forbidden;
  • 所有主流 LMS(Moodle、Canvas、Brightspace、Schoology)均严格遵循此规范,生产环境必须合规。

✅ 总结:三步落地建议

步骤 操作 工具端责任
1. 启动处理 验证并解析 Launch JWT ✅ 提取 user_id, email, roles, context.id 等基础字段
2. 权限申请 向 LMS Token Endpoint 发送含正确 scope 的请求 ✅ 使用 contextmembership.readonly 获取 NRPS 访问权
3. 成员拉取 用 Access Token 调用 NRPS Membership API ✅ 分页获取全量课程成员,支撑 OneNote/Teams/OneDrive 等深度集成

? 补充提示:Microsoft 365 LTI 应用已全面采用此模式——其 OneNote 课堂笔记本自动填充、Teams 课程团队同步、作业成绩回传等功能,全部依赖 Launch JWT 的即时身份识别 + NRPS 的全量成员同步。截至 2026 年 9 月,所有经典 LTI 工具(如旧版 OneDrive LTI)已停用,新部署必须严格遵循 LTI 1.3 Advantage 规范。

通过以上结构化实践,你将构建出既符合 IMS Global 标准、又具备生产级稳定性的 LTI 1.3 工具,无缝接入 Moodle、Canvas、Blackboard、Brightspace、Schoology 及所有 LTI 1.3 Advantage 兼容平台。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

9337

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

6502

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

5792

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1024

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

848

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

1216

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2449

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

19811

2023.08.03

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

0

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn