要创建 SSHA 密码,您需要先对密码进行 SHA1 哈希运算,并在哈希值后附加盐值(密码 + 盐值)。然后,将此哈希值与盐值一起进行 Base64 编码(SHA1 + 盐值)。请查看附件中的示例或示例脚本。Github 上的社区仓库。
Canvas 用户 CSV 文件导入功能允许您导入纯文本用户密码或预哈希处理的用户密码。我们先进行一个简单的问答环节。
问:我不知道什么是加密哈希,我还能用这个吗?
答:如果您不熟悉哈希值,那么这个工作流程可能不适合您。为 Canvas 生成格式正确的字符串稍微复杂一些,本文档是为贵机构的开发人员/IT 人员编写的。
问:我从未意识到我正在将用户置于危险之中。这是世界末日吗?
答:不。SIS 数据导入是通过 HTTPS 进行的,所以数据仍然是加密的。对密码进行哈希处理只是增加了一层额外的安全保障。但是,如果可以的话,最好还是不要发送明文密码。
问:我使用的是 CAS(或 SAML 或 LDAP),这会对我有什么影响?
答:这可能会对您和您的用户产生影响,但可能性不大。这仅适用于通过 Canvas 身份验证的用户。
问:我可以将其用于已经在 Canvas 中的用户吗?
答:不。用户一旦在 Canvas 中更改了密码,就无法通过 SIS 导入文件更新密码。
实施 SSHA 密码
你需要创建一个包含盐值的密码的 SHA1 哈希值(密码 + 盐值)。然后,将该哈希值与盐值一起进行 Base64 编码(SHA1 + 盐值)。
对于视觉学习者,我在下面提供了一些示例,一个 PHP 脚本和一个 OS X / Ubuntu 终端(抱歉,Windows 用户)。
OS X / Ubuntu
首先生成密码和盐值的 SHA1 哈希值。在本例中,密码为“password”,盐值为“salt”。
echo -n passwordsalt | shasum -a 1 | awk '{print $1}'
在 Ubuntu 中,你也可以通过将 shasum 改为 sha1sum 来实现同样的效果。我估计大多数其他大型 Linux 发行版默认也都是这样做的。
echo -n passwordsalt | sha1sum | awk '{print $1}'
输出结果为“c88e9c67041a74e0357befdff93f87dde0904214”。因此,我们将取该哈希值,并再次附加盐值,对其进行 base64 编码。
echo -n 'c88e9c67041a74e0357befdff93f87dde0904214salt' | base64
结果为“Yzg4ZTljNjcwNDFhNzRlMDM1N2JlZmRmZjkzZjg3ZGRlMDkwNDIxNHNhbHQ="。在此字符串前添加“{SSHA}”,即可将其发送到 Canvas。在 CSV 文件中发送时,它应该看起来像这样:“{SSHA}Yzg4ZTljNjcwNDFhNzRlMDM1N2JlZmRmZjkzZjg3ZGRlMDkwNDIxNHNhbHQ="。
PHP
设置密码和加盐值。
$pass = 'password'; $salt = 'salt';
生成密码和盐值的 SHA1 哈希值。密码应放在盐值之前。
$sha_hash = sha1($pass . $salt);
对 SHA1 哈希值进行 Base64 编码。请务必再次在字符串末尾添加盐值。
$encoded_pass = base64_encode($sha_hash . $salt);
在哈希编码字符串的开头添加“{SSHA}”。
$hashed_password = "{SSHA}" . $encoded_pass;
现在您可以将此文件发送到 Canvas。请将 $hashed_password 的内容添加到 users.csv sis 导入文件中的 ssha_password 列。
我附上了一个可以直接上传到 Canvas 的示例 CSV 文件和一个示例 PHP 文件,希望能帮助您快速上手。我还建议您查看一下 Python 脚本。Github 上的社区仓库。