私は、承認されたクライアントアプリケーション(iOS/Android用のモバイルアプリケーション)によって消費されるAPIを公開するRailsアプリケーションを作成したいと考えています。私はまだアプリケーションの作業を開始していないが、基本的なデータにアクセスするための主要な方法は、APIを介して行われます。 grape gemを使用してみましたが、認証レイヤーを追加する必要があります。私はdeviseを使用し、クライアントの詳細、apiキーと秘密鍵を格納するための別のモデルを追加することを考えていました。 apiを介してサインインすると、APIキーと秘密が返されます。 APIキーはリクエストごとに送信されますが、秘密キーは送信されません。代わりに、各要求に署名するために使用されます。リクエストパラメータは、名前順に並べられ、ハッシュキーとして秘密キーを使用してハッシュされます。この署名は、要求のパラメータとして追加されます。Rails API認証 - サニティチェックとアドバイス
この認証システムは論理的で安全ですか?
システムのプロトタイプを先に試してみましたが、devonを使用してJSONを使用してユーザーを登録するのが難しくなりました。最初はCSRFエラーが発生しました。私はprotect_from_forgeryをオフにして別のエラーが発生しました。私がこのように認証しているなら、これをオフにしても安全ですか?
署名なしでは、クライアントとサーバーの中間にいる誰もが鍵を盗聴できます。したがって、クリアテキストでAPIキーを渡すだけでは不十分です。私はむしろ、攻撃者が要求からそれを得ることができるよりも鍵を得るために私のモバイルアプリを分解しなければならない。 – ctcherry
@ctcherry:それは本当です。しかし、あなたのアプリがハッキングの価値があるなら、とにかくそれをやります。私は個人的にはほとんど違いが見えません。 –
私のアプリケーションは、ほとんどの人にハッキングする価値はありませんが、開発者として私の意見では、最良の(妥当な)慣行でユーザーを保護するために最善を尽くすことが私たちの責任です。ほとんどのクラッカーがそれをどうにかして取得することに興味がなくても、プレーンテキストでパスワードを保存しないのと同じ理由です。 – ctcherry