これが一般的なタイプの質問であることは承知していますが、私の特定のニーズに対応する他の質問を見つけることができませんでした。
バックグラウンド
- Ruby on Rails で開発された Web API からデータを取得する iOS アプリがあります。
- 他のソースが自分の API からのデータを使用できないように、自分の API を民営化したいと考えています (つまり、他の誰かが自分の API URL にアクセスして顧客のためにデータを使用するアプリを開発しています)。
要件
- (ハード) 許可されたクライアント (iOS アプリからのみ) のみが API からのデータにアクセスできるようにするためのプライベート API。
- (HARD) ユーザーは、ユーザー/パスワード アカウントを作成する必要はありません。
- (SOFT) 私は、Apple に承認されたアプリを取得しようとすると、SSL が悪夢になる可能性があることを読みました。これは (現時点では) 短時間のアプリであるため、SSL に依存し ないことを好みます。ただし、iOS 上のすべての API トラフィックで SSL を使用することの容易さに関して正しい方向に向けることができれば、私はすべて耳にします)。
! 興味を失っている場合は、質問の最後までスキップしてください :) !
これまでのアイデア
アイデア 1:
- iOS は Web からトークンを要求し、いくつかの UUID を送信します
- WEB は API_Token と Token_Expiry で応答します
- Web は UUID、API_Token、および Token_Expiry をデータベースに保存します
- iOS は API_Token、Token_Expiry をローカルに保存します
- iOS は UUID と API_Token を送信してデータをリクエストします
- WEB は UUID と API_Token を検証し、データで応答します
- API_Token の有効期限が切れるまで手順 5 ~ 6 を繰り返し、その後手順 1 から繰り返します。
*アイデア 2: (1 回限りの API_Token)*
- iOS は Web からトークンを要求し、いくつかの UUID を送信します
- WEB は API_Token で応答します
- WEB は UUID と API_Token をデータベースに保存します
- iOS は API_Token をローカルに保存します
- iOS は UUID と API_Token を送信してデータをリクエストします
- WEB は UUID と API_Token を検証し、データと新しいトークンで応答します
- iOS はデータを取得し、NEW TOKEN をローカルに保存します
- 手順 5 ~ 7 を無期限に繰り返す
これらのアイデアの問題点
iOS 向けの完全な UUID ソリューションはもはや存在しないと思います。UUID が時間の経過とともに変化する可能性がある場合 (またはユーザーが複数の iOS デバイスを持っている場合)、認証の問題が発生する可能性があります。
ハッカーが API キーを取得した場合、データにアクセスできないようにしたくありません (したがって、有効期限または新しいトークンのアイデアです)。
質問
Rails と iOS の間で安全な API を作成するには、どのような提案が必要ですか?
編集1:
これがいつも出てくるものではないことに今でも驚いています。API と通信するが、ユーザーにサインアップを強制しないアプリがたくさんあるはずです。SSL または OAuth が唯一の適切なソリューションである場合は、擁護してください。ぜひ聞きたいです。