跳轉到

Moodle 驗證架構參考

總說

Moodle 不走 Google OAuth,使用獨立帳號密碼驗證。

關鍵點:Google oauth2 token (token.json) 無法用於 Moodle 登入。兩個系統的認證完全獨立。


1. 認證方式

1.1 帳密認證(目前方案)

Moodle 帳密透過 .env 設定:

MOODLE_ACCOUNT=<你的_moodle_帳號>
MOODLE_PASSWORD=<你的_moodle_密碼>

使用場景: - 爬蟲 Moodle 課程首頁取得事件列表 - OIDC/Selenium 登入備備方案

1.2 OIDC 層進階方案(實驗中)

某些 Moodle 實例可能啟用 Shibboleth/SAML/OAuth 等企業級認證。目前 Time Compass 的爬蟲不支援,但架構預留。

相關細節可見: - Moodle 深度分析


2. 應用範圍

2.1 需要 Moodle 帳密的功能

  • Moodle 事件爬蟲(scrape_moodle_events()
  • 課程資料聚合(get_time_context 中的 Moodle 區塊)
  • 課程列表展示

2.2 不需要 Moodle 帳密的功能

  • Google Calendar/Tasks 讀寫(用 Google OAuth)
  • Gemini AI 對話(用 GEMINI_API_KEY)
  • 純本地 UI 功能

3. 設定與測試

3.1 設定步驟

  1. 取得你的 Moodle 帳號密碼(通常與校內系統同帳)
  2. 寫入 .env
    MOODLE_ACCOUNT=student123
    MOODLE_PASSWORD=your_secure_password
    
  3. 重啟 MCP 伺服器或 IDE

3.2 驗證成功

呼叫 MCP 工具 get_moodle_events(),預期: - 回傳課程事件清單(非 401 Unauthorized) - 包含課程名稱、事件標題、截止時間

3.3 常見錯誤

症狀 原因 解法
401 Unauthorized 帳號或密碼錯誤 確認 Moodle 登入頁面能手動登入
無法解析課程列表 Moodle HTML 結構變更或特殊字元編碼 檢查 爬蟲邏輯
超時或斷線 網路延遲或 Moodle 伺服器繁忙 增加 timeout 或重試;見逾時設定

4. 安全考量

4.1 密碼管理

  • 👉 必須:不可將 .env 提交到 Git
  • 👉 建議:使用學校提供的臨時密碼或應用專用密碼(如有支援)
  • 👉 建議:多使用者環境使用環境變數注入而非檔案存儲

4.2 與 Google OAuth 分開

Moodle 帳密與 Google token 是兩個完全獨立的認證系統:

系統 認證方式 存儲位置 用途
Google OAuth 2.0 token.json Calendar、Tasks、Gemini API
Moodle 帳密 .env 課程事件爬蟲

不要混用、共享或假設兩者有相關。


5. 升級與替代方案

5.1 若 Moodle 支援 OAuth

部分現代 Moodle 實例可能啟用 OAuth provider。若貴校支援,價值: - 無需在 .env 儲存明文密碼 - 使用標準 OAuth flow(類似 Google) - 更符合現代安全實踐

實作成本:需改寫爬蟲與認證層。

5.2 若要使用官方 Moodle API

Moodle 提供 Web Services API,但需: - 明確的 API token(由管理員核發) - 伺服器啟用 Web Services(通常預設關閉) - REST 端點存取權限

相比爬蟲更穩定,但依賴校方 IT 支援。


相關文件