php - 如何快速保护身份验证

标签 php ios swift security encryption

<分区>

我对 iOS 应用程序编程还很陌生。我更深入地研究了为应用程序创建登录名。这个过程对我来说很清楚,但我对安全方面有一些担忧。

A) 应用程序将用户提供的凭据发送到可以用 php 编写的 API。然后,此 API 将验证凭据并将响应发送回应用程序。然而,这不是一个大的安全问题吗?难道不能为每个拥有 API 地址的人验证一些凭据吗?

B) 其次,我还没有看到在将凭据发送到 api 之前正确加密应用程序中的凭据的教程。如果他们进行加密,他们会让 API 完成这项工作。在应用程序中加密它们并将加密的凭据发送到 API 的正确方法是什么?我需要在我的应用中存储 key 吗?

我问这个是因为我想从一开始就以正确的方式去做。谢谢。

最佳答案

首先,我要说的是确保您的服务器已准备好 SSLipv6 功能。 (照顾好 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

关于php - 如何快速保护身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45690917/

相关文章:

php - Laravel 表单复选框数据

iphone - 在 iOS 中的 Orientation 上加载不同的 xib 文件

iOS:不同 Storyboard中的 presentViewController 不显示导航栏

ios - NSSearchPathForDirectoriesInDomains 的应用程序 ID 更改每个模拟器在真实设备上运行和更新应用程序

php - 交响乐团 3 : can't overwrite repository

php - HTML 解析器的 Git 补丁

php - 使用 PDO 预准备语句插入时 MySQL 性能极差

iOS 命令行构建 : How to create xcode archive from command line?

ios - 如何在 UITableViewCell 中使用 UIAlertController

swift - 在闭包中解构元组的元组