0

在画布中,为了让 LTI 应用程序进行身份验证,站点管理员已输入远程站点的 JWK。JWK 的格式定义明确:

{
"kty":"RSA",
"kid":"...",
"use":"sig",
"alg":"RS256",
"n":"u6gqiV...",
"e":"AQAB"
} 

首先,我们可以使用像 openssl 这样的工具,创建一个密钥,然后从中生成一个 JWK 吗?目前我们正在使用 jose4j 编写代码来执行此操作,但甚至不清楚这是否有必要。

其次,Canvas 要求可选字段,例如 Kid、alg 和 use。我们猜测use应该是“sig”,我们组成了kid:“1”并猜测了alg:“RS256”

是否有一个可以访问的地方(即不在 IMSGlobal 的付费墙后面)来定义这应该是什么?它是标准的还是特定于 Canvas 的?

4

2 回答 2

1

我们又见面了——几个月来一直在讨论 LTI 规格,我很想看看我是否可以让其他人不那么头疼。

您可能熟悉使用 SSL 工具同时生成相互纠缠的公钥和私钥的验证模式。公钥用于对有效负载进行签名,并且由于有效负载本身是创建签名的一个因素,因此无法在不使其无效的情况下对其进行拦截和恶意更改。接收者将获得公钥,用于验证有效负载是否干净。

JWK 的用途与公钥相同。唯一的区别是,开发人员不需要提前通过电子邮件将其发送给收件人应用程序的 IT 团队。JWT 有效负载的接收者可以按需检索它,它只需要知道要询问的 URI。这意味着密钥实际上可以由发送者替换而不会破坏任何功能。

正如我在其他地方提到的,对于这个问题更适合的咆哮:

此安全步骤类似于从您的银行收到一封电子邮件,您无需单击其中的潜在垃圾邮件链接,而是直接致电您的银行以确保电子邮件正常。

现在,发送者的 JWKS 端点并不真正提前知道谁会联系到它,并且可能想要为多个其他实体提供服务,因此它实际上可能会提供一组公钥来覆盖所有基础。接收者当然只关心与它刚刚收到的有效负载相关联的那个,因此在 JWK 签名中是一个“孩子”,它可以与这些数组元素之一中的“孩子”相匹配,与相关密钥相关联.

如何创建 JWK?去这里。依赖项列在顶部,它们可能在后台使用 openssl。

于 2020-12-15T21:03:43.957 回答
0

JWK 是一种在工具和平台之间交换公钥的方法,并允许每一方控制其密钥的轮换。JWK的格式是托管 ietf 标准。

LTI 1.3 基于 OIDC 第三方启动流程,而后者又基于 OAuth2。但是,将您的应用程序与 LTI 1.3 集成不需要具备这些规范的完整工作知识。IMS在 github 上整理了一组代码示例,可以帮助您入门。

于 2021-05-14T19:52:43.747 回答