2016-06-20 13 views
0

クライアントで使用するAPIサービスを作成します。 apiは、クライアントのウェブサイトを使用して顧客に表示されるデータを返すことになります。 apiはどんな種類のユーザーデータも必要としません。node.jsを使用したapi認証

私はapiキーを使用して関連するデータを返すことを考えていました。しかし、私はクライアントのWebサイトを使用している顧客だけがAPIにアクセスできるようにしたいと思っています。

私はフロントエンドでapiを使用し、apiキーを公開すれば誰でもブラウザからapiを使用できるようになります。私はそれが起こることを望んでいません。これをどのように認証するのですか?それがうまくいかない場合は、サーバーからクライアントサーバーにapiを使用できますか?それでも、サーバーをどのように認証しますか?

私はnodejsを使用しており、バックエンドで表現しています。何か案は?ありがとう!

答えて

0

APIが公開されていて、ユーザー認証なしで公開されている場合、そのAPIへのアクセスを制限する方法はありません。
リファラーの確認や特別なトークンの作成などの多くの回避策がありますが、すべてがクライアント側に格納され、悪意のあるユーザーが再利用できます。

一般的に意味がありません。既にAPIをクライアントに公開しています。動作中のアルゴリズムを作成しても、悪意のある人は単にあなたのウェブサイトのJavaScriptメソッドを実行して動作させることができます。あなたは何から守ろうとしていますか?

APIへのアクセスを制限する場合は、このAPIをバックエンドにして、サーバー側のWebクライアントだけがアクセスできるようにするのが最も適切かつ効率的な方法です。

+0

ありがとうございます。それは理にかなっている。クライアント側でapiバックエンドを作成しても、要求が正しいサーバーから来ていることを認証する方法を知っていますか?私は、私たちがapi keyを公開しているのではなく、確かめることを知っています。 – prdtuty

+0

@prdtutyサーバー側のアプローチを使用し、サーバーが何らかの内部ネットワークに配置されている場合、IPフィルタリング、ルーティング、証明書などのデフォルトの制限ルールを適用するだけで済みます。通常はIPフィルタリングで十分です。 192.168.0.1であり、192.168.0.2にはバックエンドAPIがあります。これは192.168.0.1までしか利用できない単一のポート(例えば80)を持ちます。 –

+0

要求しているサーバーが内部に配置されていません。このような状況でCORSを有効にする必要があると思いますか? – prdtuty

1

これはやりにくいことです。本質的に公開apisを制限します。一日の終わりに、Webページはローカルマシン上のユーザーのブラウザに表示されます。したがって、ブラウザからアクセスできる場合は、手動でアクセスすることもできます。 APIキーは実際には最良のアプローチですが、これはアクセス制御以外の手段としてのみ機能します。ブラウザーに入れたアクセスコントロールの種類は、残念なことにブラウザー外で模倣することができます。

ユーザーがある程度ログインしているルートを下りたい場合は、json web tokens (jwt)を調べる必要があります。これはユーザーレベルである必要はなく、必要に応じてセッションレベルの並べ替えが可能です。しかしこれはapisに直接アクセスするユーザを制限しません。

関連する問題