我想存储一个秘密密钥("abc123"),并在我的REST API请求头中使用它。我的服务器将检查这个秘密密钥。如果与"abc123"匹配,则允许请求。
我考虑了一个简单的解决方案,例如:
let secret = "abc123"
但是这会有什么不利之处吗?
我想存储一个秘密密钥("abc123"),并在我的REST API请求头中使用它。我的服务器将检查这个秘密密钥。如果与"abc123"匹配,则允许请求。
我考虑了一个简单的解决方案,例如:
let secret = "abc123"
但是这会有什么不利之处吗?
听起来很疯狂,但这可能是最好的解决方案。其他所有方法都更加复杂,但安全性并没有提高太多。您使用的任何花哨的混淆技术都将很快被逆向工程,就像他们发现这个密钥一样。但是,这种静态密钥解决方案虽然非常不安全,但几乎与其他解决方案一样安全,同时几乎不会增加额外的复杂性。我喜欢它。
它几乎立即就会被破解,但所有其他解决方案也会如此。所以保持简单。
在这里真正想做的一件事情是使用HTTPS和固定您的证书。我会选择一个长的,随机的密钥,而不是一个单词。理想情况下,它应该是一串完全随机的字节,以原始值存储(而不是字符),以便在您的二进制文件中不那么明显。如果您想变得疯狂,可以在发送之前对其应用SHA256(因此实际密钥永远不会出现在您的二进制文件中)。同样,这很容易被破解,但很容易,不会浪费大量时间进行开发。
实现这个功能的付出超过一个小时可能不值得。如果您想了解更多相关内容,请参阅 iPhone应用程序到网页的安全https加密及其链接。
我使用了PFConfig对象(一个字典),它允许您在应用程序中检索存储为服务器环境参数的变量值。
类似于可以使用ENV在Web站点服务器端编程(如Ruby或PHP)中检索的环境变量。
在我看来,这与在Ruby或类似语言中使用环境变量一样安全。
PFConfig.getConfigInBackgroundWithBlock{
(config: PFConfig?, error: NSError?) -> Void in
if error == nil {
if let mySecret = config["mySecret"] as? String {
// myFunction(mySecret)
}
}
看起来你正在使用访问令牌。我建议使用Keychain存储访问令牌。对于客户端ID,我建议将其保留为变量,因为客户端ID不会更改,而访问令牌会随用户或刷新令牌而更改,而Keychain是存储用户凭据的安全位置。
api-key
而不是secret-key
。你能编辑一下你的问题吗? - mfaani