You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用ASP.NET Core MVC验证Moodle中已登录用户身份?

将ASP.NET Core MVC作为Moodle外部工具的用户身份传递方案

Moodle外部工具基于LTI(学习工具互操作性)标准实现,不需要手动获取用户的令牌或用户名密码,而是通过标准化的请求参数安全传递用户身份信息,以下是具体实现步骤:

1. 配置Moodle外部工具的用户信息传递

在Moodle后台添加外部工具时,完成以下关键配置:

  • 启用接受来自工具的用户信息(不同版本可能表述略有差异)
  • 在「参数」配置区添加需要传递的用户字段,常用字段包括:
    • user_id:Moodle内部唯一用户ID
    • username:用户登录账号
    • fullname:用户全名
    • email:用户邮箱
      这些参数会在用户从Moodle跳转至你的ASP.NET应用时,通过POST请求自动携带。

2. 在ASP.NET Core MVC中接收并验证用户信息

你的应用需要提供一个接收LTI启动请求的控制器Action,解析请求中的用户参数,同时必须验证请求签名防止伪造:

[HttpPost]
public IActionResult LtiLaunch()
{
    // 提取LTI请求中的用户身份参数
    var moodleUserId = Request.Form["user_id"];
    var username = Request.Form["username"];
    var fullName = Request.Form["fullname"];
    var email = Request.Form["email"];

    // 验证LTI请求签名(核心安全步骤)
    // 使用你在Moodle外部工具配置中设置的共享密钥进行验证
    // 可借助成熟的LTI库简化开发,比如LtiLibrary.AspNetCore

    // 后续业务逻辑:根据用户信息创建会话、映射本地用户等
    return View();
}

3. 调用Moodle Web服务的身份处理

如果需要在ASP.NET应用中调用Moodle Web服务:

  • 若仅需查询用户信息,直接使用你已生成的服务令牌,调用core_user_get_users函数,传入从LTI获取的user_id或username即可获取用户详情
  • 若需要以当前用户的权限执行操作,常规流程是通过LTI身份映射后,使用服务令牌代理操作;若必须使用用户个人令牌,需引导用户通过Moodle的OAuth2授权流程获取,但这不属于外部工具的标准集成方式

4. 安全注意事项

  • Moodle不会传递用户密码,所有身份信息通过签名请求传递,确保数据不可篡改
  • 必须验证LTI请求的签名,否则可能遭遇伪造身份的攻击

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 21:57:46