web-dev-qa-db-ja.com

iOSでの認証トークンの保存-NSUserDefaultsとキーチェーン?

ユーザーがサービスにログインするときにトークンを保存する場所はどこですか?パスワードを保存するのではなく(明らかにキーチェーンを使用する場所)、トークンのみを保存します。多くの場所がNSUserDefaultsを使用するだけだと言っていますが、StackOverflowの一部の人々はキーチェーンに本当に熱心に見えます。

NSUserDefaultsは大丈夫ですか?

63
Doug Smith

キーチェーンを使用することを強くお勧めします-これはまさにFacebookがセッショントークンを保存するために行うことです。

NSUserDefaultsは安全でも暗号化されていません-デバイス上でもMacに同期していても、簡単に開いて読むことができます。そのため、ユーザーのデフォルトは設定や構成情報などには適していますが、パスワードなどの機密事項には適していません。

セッショントークンはほぼ常にパスワードと同じように扱われる必要があるため、暗号化されるキーチェーンに安全に保存する必要があります。 Apple基本的な実装を示すサンプルコード( GenericKeychain )があり、StackOverflowを検索することで他の例を見つけることができます。お役に立てば幸いです。

89
lxt

NSUserDefaultsは問題なく使用できます。ドキュメントを確認してください https://developer.Apple.com/documentation/security/keychain_services

キーチェーンサービスは、ユーザーが明示的に気にする「秘密」、つまりパスワード、秘密鍵、またはセキュリティで保護されたメモ、つまり資格情報をクリアするために発明されました。ただし、アクセストークンは、ユーザーがパスワードを入力した後に生成される一時的なハッシュであり、時間が制限されています。たとえ盗まれたとしても、悪意のある人はアカウントを完全に盗むことはできません。所有者は別のデバイスにログインでき、以前のアクセストークンはリセットされます。そのため、正式にはUserDefaultsにアクセストークンを保存することは禁止されていません。

UserDefaultsからのデータは、デバイス自体が盗まれた場合にのみ盗まれますが、コンテンツのセキュリティレベルは物理デバイス自体よりもはるかに低いと思います。その場合、ユーザーはトークンについて心配するのではなく、デバイスについて心配するでしょう。

ただし、キーチェーンに保存することをお勧めしますが、セキュリティを過度に(!)使用するだけであり、通常はインターネットのランダムユーザーが推奨します。Appleでは必須ではありません。 Appleによるドキュメントはありません。そこでは、トークンはキーチェーンに保存する必要があると言われています(見つけた場合は、以下にコメントしてください)。

したがって、答えは-両方を使用できます。ただし、盗まれたiPhoneとは対照的に、コストが高いコンテンツでアプリを運用している場合は、キーチェーンを使用することをお勧めしますが、これは単なる推奨事項です。

3