将Moodle连接到LTI

@david David,您能与我分享一个配置实例吗?我尝试多次将 Discourse 与 Moodle 3.10 集成,但仍未成功。始终提示:

OpenSSL::PKey::RSAError (Neither PUB key nor PRIV key: nested asn1 error)
lib/middleware/omniauth_bypass_middleware.rb:50:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:355:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:187:in `call'

您在“平台公钥”设置中输入了什么?如果我的记忆没错,Moodle 默认提供一个 JWKS URL,而此插件尚不支持该功能。

应该可以在某处找到原始证书,您可以将其复制并粘贴到 Discourse 中。

@david 感谢您的回复。是的,在 Moodle 中显示 Public keyset URL: https://mysiet.com/mod/lti/certs.php
我在浏览器中打开此 URL,显示如下:

{
    "keys": [
        {
            "kty": "RSA",
            "alg": "RS256",
            "kid": "1371e22ce81f1dbb936a",
            "e": "AQAB",
            "n": "xXOfRS1UronVdVUEal0jyIhyNkAcbCRb6K2uzLsoQgRAaqA2ixbshCTWW_Yj-ZoJgg7UoruO65TB5EIldMyPJbYjYoMF0rB5a-wcvEhtWxfLs8FsDNLM9czjYXZUXBJ6sxIGNp-9Wp4c6PaecvXDfc4bJoHU8Ee5WzUk2XuX8dXX4jx8ipwzRa8qaQT-0cIPnZw4LmkPiTgn-gA-LuqjG2w9awwjnWTuZbTNPTphgPO9FD4lD_dAY3biURU_lEyJXflqFYwbrpja-b8y23qixwiHEYsM3_2F5D-DrI3Nsty219-ALDmJ0wY1hnr4p2NfwYZr_d2YjpIiJW_8iW3SRQ",
            "use": "sig"
        }
    ]
}

我将 JSON 中“n”的值(最长的那个)复制到 Discourse 中。但错误依旧。

我认为仅复制 n 值是不够的——Discourse 需要 PEM 格式的密钥。从长远来看,我们或许可以添加对 JWK 的支持,但在短期内,您应该可以通过转换密钥来使其正常工作。

有一些在线工具可以将 JWK 格式转换为 PEM 格式。这里有一个。(显然,我无法保证这些在线工具的安全性,因此请确保仅向其中粘贴公开信息)

一旦您获得了 PEM 格式(以 -----BEGIN PUBLIC KEY----- 开头),Discourse 就应该能够接受它。