如何在iOS中存储客户端ID /客户端密钥字符串

时间:2017-01-08 02:32:25

标签: ios oauth

我正在构建一个使用OAuth进行身份验证并向用户授予帐户访问权限的应用程序。

当前的身份验证流程如下:

  1. 创建新应用程序
  2. 使用API​​服务注册应用程序
  3. 安全地存储授予的客户端ID和客户端密钥
  4. 启动申请
  5. 应用程序在SFSafariViewController
  6. 中打开服务的OAuth请求以供审批
  7. 用户批准该应用程序访问其服务的帐户
  8. 回复应用程序提供了代码,该代码在AppDelegate
  9. 中收到
  10. 发布通知,将代码传递给视图控制器,视图控制器将发起交换客户端ID,客户端密码和OAuth令牌代码的请求,以用于验证后续请求
  11. 使用客户端ID,客户端密码和代码发送请求以交换OAuth令牌
  12. 将密钥存储在Keychain中以用于后续API请求
  13. 我列出了所有工作,但是,我不知道如何存储我在向服务注册我的应用程序时授予的客户端ID和客户端密钥。客户端ID和客户端密钥应安全保存,不得共享。当用户为OAuth令牌交换它们时,将使用它们。

    由于我使用GitHub进行版本控制,我是否在应用程序中创建属性列表来存储项目?如果是这样,我可以将该文件添加到我的.gitignore。这是存储我的凭据的合适方法吗?

2 个答案:

答案 0 :(得分:0)

如果我理解你的问题(你需要为每个用户存储密钥),你可以将它们存储在iCloud容器中。基本上它就像UserDefaults,但在用户的iCloud中。你可以在那里写作和阅读。有关详细信息,请查看此docs

让我知道是否有帮助因为我不确定我的问题是否正确。如果没有,请以其他方式解释:)谢谢

答案 1 :(得分:0)

不应在本机应用中存储客户端密码,因为它是a public client。本机应用程序无法保护资源所有者的数据(因此也无法保护客户端机密)。

客户端机密适用于能够正确隐藏客户端密钥的服务器(或任何机密客户端)。您可以通过HTTPS处理来自移动应用程序的传入请求的服务器(可以存储客户端密钥),然后将访问/刷新令牌发送回您的移动应用程序。