我对 iOS 应用程序编程还很陌生。我更深入地研究了为应用程序创建登录名。这个过程对我来说很清楚,但我对安全方面有一些担忧。
A) 应用程序将用户提供的凭据发送到可以用 php 编写的 API。然后,此 API 将验证凭据并将响应发送回应用程序。然而,这不是一个大的安全问题吗?难道不能为每个拥有 API 地址的人验证一些凭据吗?
B) 其次,我还没有看到在将凭据发送到 api 之前正确加密应用程序中的凭据的教程。如果他们进行加密,他们会让 API 完成这项工作。在应用程序中加密它们并将加密的凭据发送到 API 的正确方法是什么?我需要在我的应用中存储 key 吗?
我问这个是因为我想从一开始就以正确的方式去做。谢谢。
首先,我要说的是确保您的服务器已准备好 SSL
和 ipv6
功能。 (照顾好 bat 的这些权利,防止你的应用在进入应用审核时被拒绝)
就保护您的 api 路由而言,您可以查看 JWT token
。 JWT 使用密码短语或证书(即私钥和公钥,想想你什么时候想在没有密码的情况下通过 ssh 连接到服务器)。
I'd preferred to use certificates, however you need to make sure that you don't lose these certificates, because once your app is ready for sale only these specific certificates would allow your app to talk to that api.
一旦你的 api 的所有路由都是安全的,我会:
生成一个默认 token 并将其存储到您应用的钥匙串(keychain)中(其目的是只允许您访问您的 api 一次)
从 api 端,创建将读取该默认 token 的路由 (/generate_token)
,如果有效,您将生成一个新 token 并将其作为响应发送。
从钥匙串(keychain)中删除默认 token 并将新 token 存储在那里。
当您的 iOS 应用首次启动时,您可以将某种 isAlreadyFetchedToken = false
变量保存到您的 UserDefault 中。此变量允许您跟踪您是否拥有新 token 。
if isAlreadyFetchedToken == false {
// load the default token into some variable
let default_token = ...
// create custom http header
let header = ["Authorization": "Bearer \(default_token)" ]
// access your /generate_token route from your api
// if you get a response it should contain a new_token
// save new token into keychain && remove default one
// update userDefault var to true
isAlreadyFetchedToken = true
}
现在每次你想访问你的 api 时,你都会从钥匙串(keychain)加载那个 token ,并将它传递到你的 api 路由的 Authorization header
例如 [Authorization: "Bearer "+ new_token]
.
This is one way, and not the only way