2016-04-13 1 views
0

私はウェブサイトを構築しています。このサイトのフロントエンドページは、AJAX経由で/からサーバーにデータを取得/送信する必要があり、サーバーは同じAPIを他のアプリケーション(非プライベートアプリ、パブリックではなく、同じ第1クラスドメイン)に提供します。フロントエンドや他のサーバーに公開されているAPIのセキュリティを確保するにはどうすればよいですか?

たとえば、POST /api/usersを使用して新しいユーザーを作成します。このサイトは登録ページを提供し、このAPIを使用してユーザーを登録します(AJAX経由)。他のアプリもこのAPIを使用してユーザーを登録できるようにしたいと思います。

一般に、ハッシュされた文字列を使用して、他のアプリからのリクエストを認証します。しかし、私はフロントページに同じことをすることはできないと思う。

フロントページと他のアプリを別々に使用する2つのAPIを使いたくありません。だから私はこれをどのようにすることができますか?

私はNode.jsとExpressを使用しています。

+0

「他のアプリ」とはどういう意味ですか? 「他のアプリ」とフロントエンドのページが異なるのはなぜですか? – Cristy

+0

@Cristy外部アプリを使うと、CORSの問題も発生する可能性があります。 – krillgar

+0

@Cristyたとえば、ドメインa.abc.comの下のこのサイトには、登録ページがあります。ドメインb.abc.com(はい、同じ第1クラスドメイン)の下に別のサイトがあり、ユーザー登録が登録要求を送信すると、bサイトは実際にサイト(サーバーからサーバー)にデータを登録して登録します。 bサイトは「他のアプリ」の1つです。 –

答えて

0

APIの組み合わせを使用することをおすすめします。ユーザーにログインするか、セッショントークンを返す必要があります。その後、すべての後続の要求にそのトークンを含める必要があります。サーバー上の他のAPIは、ユーザーセッショントークンなしで要求を許可すべきではありません。したがって、リクエストが/ app/dataなどに来ると、サーバーはセッショントークン(通常はヘッダーで送信されます)を検索して、ユーザーが存在し、ログインしていることを確認します。

これは通常、ユーザーはWebサイトから登録する必要があるため、Webサイトのシナリオを使用します。したがって、登録APIは登録APIに対してCORSを許可せず、サーバー内の他のすべてのAPIに対してCORSを許可することによってウェブサイトに限定されています。セッショントークンが有効であることを確認するためにセッショントークンを検索している限り、そこにはセキュリティリスクがあまりにも多いとは思われません。

さらに高度で安全なアプローチは、OAuth 2でAPIを保護することです。サーバーを所有しているため、ウェブサイトとモバイルアプリの両方からのOAuth 2ハンドシェイクを使用してユーザーを登録するのは簡単です。

+0

ありがとうございます。私はここで少し混乱しています。 CORSの問題は、フロントエンドとサーバーエンドの間で発生しませんか?サーバからサーバまではどうですか? –

+0

サーバー間通信の場合、セッショントークンを使用して着信要求を検証できます。そうすることで、サーバーがログインしていることがわかります。また、CORSを使用して、別のIPアドレスで動作しているサーバーをブロックすることもできます。通常、サーバーはファイアウォールの背後にある10.0.0.0/24のIP範囲で動作します。ただし、CORSヘッダーを使用して10.0.1.33からのアクセスのみを許可できます。 –

+0

10.0.0.0/24で動作するサーバは、通常、Localhost上でテストを実行するようなセキュリティなしで通信するように設定されます。ただし、この動作は簡単に変更できます。 –

関連する問題