アプリでRestfulAPIレイヤーを開発しています。このアプリは、HTTPSサポートが利用できない施設で使用されます。Webアプリとモバイルアプリの両方をサポートする必要があります。サーバー側でNode/Expressjsを使用しています。私の2つの懸念は次のとおりです。
HTTPSなしで安全な認証を設定する方法はありますか?
Webアプリ(backbonejs)とネイティブモバイルアプリ(iOS)の両方で同じ認証レイヤーを再利用する方法はありますか?
アプリでRestfulAPIレイヤーを開発しています。このアプリは、HTTPSサポートが利用できない施設で使用されます。Webアプリとモバイルアプリの両方をサポートする必要があります。サーバー側でNode/Expressjsを使用しています。私の2つの懸念は次のとおりです。
HTTPSなしで安全な認証を設定する方法はありますか?
Webアプリ(backbonejs)とネイティブモバイルアプリ(iOS)の両方で同じ認証レイヤーを再利用する方法はありますか?
あなたは信憑性と守秘義務を混同していると思います。発信者がMACを使用していると言っている人を安全に検証するAPIを作成することは完全に可能です。ほとんどの場合、HMACです。ただし、共有シークレットを安全に確立していることを前提としています。これは直接行うことができますが、それはかなり不便です。
Amazon S3は、 SSL/TLSなしでリクエストを認証するAPIの例です。これは、呼び出し元がHTTP要求の一部に基づいてHMACを作成する特定の方法を指示することによって行われます。次に、リクエスターが実際にそのオブジェクトを要求することを許可された人物であることを確認します。AmazonはSSLに依存して、登録時に共有シークレットを最初に確立しますが、SSLは、許可された個人から発信されたものとして安全に認証できるAPI呼び出しを正しく実行するために必要ではありません。
現在、このアプローチの欠点は、両方向に渡されるすべてのデータが誰にでも表示されることです。送信された認証データでは、攻撃者が有効なユーザーになりすますことはできませんが、攻撃者はあなたが送信したものをすべて見ることができます。したがって、多くの場合、機密性が必要です。
S3で公開されたAPI応答のユースケースの1つには、コードが1つのサーバーでホストされ、その画像などがS3でホストされているWebサイトが含まれます。多くの場合、ウェブサイトはS3のクエリ文字列認証を使用して、ブラウザがS3から直接画像を要求できるようにします。また、ウェブサイトコードが、ブラウザにその画像の取得を許可できる唯一のコードであることを確認します(したがって、所有者に請求します)。帯域幅の場合)。
非SSLリクエストの使用を可能にするAPI認証メカニズムの別の例はOAuthです。これは廃止された1.0ファミリであり、SSLを使用している場合でも排他的に使用されます。OAuth2.0仕様では、 OAuth2 HTTP MACタイプなど、いくつかのアクセストークンタイプが定義されています。すべてのリクエストのTLS(ただし、最初にシークレットを確立するためにSSLが必要です)。OAuth2 BearerタイプはSSLを必要とし、物事をよりシンプルに保ちます(正規化なし); 十分に確立されテストされたライブラリなしですべてのリクエスト署名APIを使用するすべての開発者の悩みの種)。
要約すると、要求の信頼性を安全に確立することだけが気になる場合は、それが可能です。応答の転送中に機密性を気にする場合は、何らかの転送セキュリティが必要になります。TLSは、アプリコードで正しく取得するのが簡単です(他のオプションも可能かもしれませんが)。
SSLを意味する場合は、いいえ。ブラウザを介してWebサーバーに送信するものはすべて暗号化されないため、サードパーティがリッスンできます。HTTPSは認証ではなく、クライアントとサーバー間のトラフィックの暗号化です。
はい、あなたが言うように、それはレイヤーなので、そのインターフェースはクライアントから独立し、HTTPになり、ウェブアプリがそのレイヤーと同じ起源である場合、問題はありません。(たとえば、myapp.comからアクセスされるapi.myapp.com)。ネイティブモバイルもHTTPリクエストを行うことができます。
SSLの場合でもSSLでない場合でも、送信前にユーザーに各要求に署名するように要求する秘密/公開鍵シナリオを使用すると、安全になります。リクエストを受信したら、秘密鍵(ネットワーク経由では送信されない)を使用して復号化し、署名されたものとユーザーがリクエストした操作を照合し、これら2つが一致することを確認します。これはUTCのタイムスタンプに基づいており、このモデルを使用するすべてのサーバーのクロック設定が非常に正確である必要もあります。
特にアマゾンウェブサービスはこのセキュリティ方式を使用しており、SSLなしで使用するのに十分な安全性がありますが、推奨されていません。
SSLをサポートするための小さな変更を真剣に投資します。これにより、SSLの信頼性が高まります。私は個人的にあなたがそれなしで信頼できる組織であるとは思わないでしょう。