我正在为API编写一个KRL模块。API需要一个访问密钥,该密钥需要由调用我的模块的规则集提供。我的模块包括模块内测试规则使用的访问密钥。
使用我的模块的规则集提供如下访问密钥:
use module a421x99 alias SuperModule with access_key = "01234567";
1-我如何编写我的模块,使访问密钥不会泄漏到生成的Javascript中?
2-假设调用规则集没有提供access_key。如何保护我放入模块中进行测试的自己的访问密钥?
首先,您应该在meta
中包含使用key
块的API密钥,如下所示:
key s3 {
"access_key" : "--access_key--"
}
这比用纯字符串存储或传递密钥要好。
第二个,您的模块需要meta
中的configure using
行(我假设您已经有了)。传递一个空哈希作为默认值将阻止调用模块的规则集使用模块中的硬编码密钥。
configure using s3keys = {}
最后,在全局块中执行如下操作:
usekeys = s3keys || keys:s3();
这一消息会告诉KRL使用调用规则集传入的s3keys
,或者使用模块自己的meta
块中的s3
密钥(如果您的模块正在自己使用)。即使有人使用你的模块,他们也永远不会得到你的keys:s3()
,因为你在configure using
行中设置了默认值。
一旦你有了usekeys
,你就可以用pick()
取出你需要的碎片:
access_key = usekeys.pick("access_key");
Sam的Twilio模块是一个很好的参考示例的地方。