私は静的なWebアプリケーション、つまりHTML/CSS/JS +アセットだけで作業しています。私はそれを提供するためにラックサーバー(実際には薄い)を使用しています。APIコールをプライベート/プロテクトしたままにする
ほとんど静的なアプリですが、途中で途切れることのないサーバー側のニーズがいくつかあります。アプリケーションはJavaScriptを介してそれらのニーズと対話する必要があるので、シンプルなAPIとして機能するようにいくつかのルートを簡単にセットアップできるように、Sinatraをスタックに追加しました。
このようなAPI呼び出しの1つは電子メールを送信することです.Webアプリケーションにはユーザーに電子メールを送信する方法が必要です。私は、JSONオブジェクトを含むPOSTで呼び出せるルート(/ api/mail)を設定し、Rubyは(SendGrid経由で)電子メールを発信します。
ここに問題があります。これらのAPI呼び出しは一般に公開されています。ほとんどの場合、大丈夫ですが、電子メールAPIを使用して、私のアプリとしてポーズをとっている単純なPOSTで誰も悪質なメールを送信しないようにしたいのです。
問題は、私はこれを認証する方法がよく分かりません。誰もがPOSTヘッダを盗聴し、アプリがAPIに投稿しているクレデンシャルを取得するだけなので、ウェブアプリケーション自体はユーザではなくクライアントであるため、パスワードやAPIキーは無意味に見えます。
SSLを使用してすべてを暗号化しているのは私の唯一の選択肢ですか、それともわかりやすい解決策がありませんか?
ここでSSLはどのように役立ちますか?あなたは誰から保護しようとしていますか? – ykaganovich
私は簡単なパブリックPOST呼び出しを行うことができるので、私の電子メールAPIをハイジャックする匿名ユーザーから保護しようとしています。誰かが2つの理由で必要な電子メールを送信できないようにすることは望んでいません。高価で、セキュリティリスク(悪意のあるユーザーが自分のアプリとしてポーズを取る)になります。 POSTで私のサイトであることを確認するためにAPIキー(またはパスワードなど)を渡すことができると考えましたが、POSTヘッダーからキーを奪うのを防ぐためにSSL暗号化が必要です。 – redhotvengeance
SSLはクライアントに対してサーバーを認証し、データをトランスポートで暗号化したままにします。しかし、それはクライアントを認証しません。誰でも、(a)ブラウザを開き、フォームページに埋め込まれたAPIキーを参照するか、(b)フォームページをダウンロードしてプログラムで取得するスクリプトを書くことができます。 APIへのアクセスをパスワードで保護することができます(基本的にはこれ以上公開されません)。私は基本的な質問は、あなたは誰がこのAPIを呼び出すことを信頼したいと思いますか。 – ykaganovich