【问题标题】:How to store non-standard web authentication?如何存储非标准的网络认证?
【发布时间】:2011-08-25 21:36:01
【问题描述】:

在我的应用与之通信的 Web API 中,身份验证过程的设计方式如下:

  1. 用户输入他/她所属的group的名称。
  2. 服务器发送组成员列表。
  3. 用户选择user name并输入password
  4. 我的应用向服务器发送一个由group iduser idpassword 构成的哈希,以验证凭据,如果验证成功,则在进一步的交易中使用此哈希。

进行此过程后,我不会收到像 connection:canAuthenticateAgainstProtectionSpace:connection:didReceiveAuthenticationChallenge: 这样的标准 NSURLConnection 消息。
我本身可以处理它,但是当涉及到安全存储凭据时,我会感到困惑。有没有办法通过一些内置的 iOS SDK 方法来做到这一点,或者我必须手动将哈希写入文件?正确的方法是什么?

【问题讨论】:

  • 我倾向于认为这不是一个好主意。它允许试图闯入的人轻松获取用户列表。鉴于该列表和常见的密码破解技术,恶意个人很可能会通过其中一个 ID 进入您的系统。因此,我不知道有任何网站提供这种登录方式。你应该重新考虑你的设计。
  • @Derek,感谢您的考虑!我会向 API 开发人员展示这个。

标签: ios authentication asp.net-web-api


【解决方案1】:

钥匙串似乎是存储用户凭据/哈希的最佳选择。 查看http://developer.apple.com/library/mac/#documentation/Security/Conceptual/keychainServConcepts/iPhoneTasks/iPhoneTasks.html

还有https://github.com/ldandersen/scifihifi-iphone/tree/05e64ff2814a8192c43f1f81eb8e09dc3764fa18/security

  • 请注意,虽然钥匙串可能是 iOS 中存储此类数据最安全的地方,但它并不完全安全。但考虑到您要存储的数据,它可能已经足够了。

编辑:查看http://overhrd.com/?p=208 您可以通过这种性质的简单调用访问钥匙串上的数据:

[Keychain setString:@"hashhashhash" forKey:@"userHash"];

// later on…
[Keychain getStringForKey:@"userHash"];

【讨论】:

  • 你能把你的答案扩大一点吗?
  • 钥匙串让您存储数据并负责保护数据(加密,并且相对安全[一旦设备丢失或被盗,几乎没有办法保证其内容的总体安全,即使加密。])。它不像 NSUserDefaults 一开始就使用起来那么简单,但是存在很多示例代码。我编辑了我的消息以添加另一个更适合您的问题的消息(因为您只想存储一个哈希),代码示例。
  • 谢谢,我会调查此事
猜你喜欢
  • 1970-01-01
  • 2010-10-08
  • 1970-01-01
  • 1970-01-01
  • 2017-06-19
  • 1970-01-01
  • 1970-01-01
  • 2010-09-24
相关资源
最近更新 更多