2

RESTベースのAPIを開発する予定です。私はトピックを調べましたが、クライアントがアプリの場合、API を保護できるようです (公開鍵 - 秘密鍵など、多くの方法があります)。ウェブサイト/モバイルウェブサイトについてはどうですか。コンテンツへのアクセスにログインを使用しないウェブサイトでレストベースの api にアクセスしている場合 (ログインはオプションです)、他の人がレストベースの api にアクセスするのをどのように制限できますか?

Oauth2.0 を使用するのは理にかなっていますか? 私はそれについて明確な考えを持っていません。

より明確な質問は、ログインを使用しない Web サイトの Web 経由で公開された get または post 要求をどのように保護できるかということです。

特定の入力でjsonデータを返す単純な get request または post request の場合、 get request または post request を使用してそれらのデータにアクセスしてデータを取得するモバイル Web サイトがあります。まあ、他の人もそれにアクセスできますが、問題はログインを使用していないことです。ユーザーはデータに直接アクセスできます。しかし、他の人がそのデータにアクセスするのをどのように制限できますか?

4

2 に答える 2

3

REST を使用していない Web サイトと REST API を使用している Web サイトの保護の違いは何だと思いますか?

OAuth は、サイトの認証機能を提供します。REST アーキテクチャでは、モバイル アプリケーションのユーザーは、リソースへのアクセスを許可される前に資格情報を提供する必要があることを意味します。その後、アプリケーションは、そのユーザーが要求されたリソースにアクセスできるかどうかを判断できます。ただし、あなたのウェブサイトは使用許可を必要としないと言いました。

証明書を使用できますが、クライアントごとに証明書を管理してください。クライアントとサーバーの間の信頼関係を管理することは決してできないため、Web サイトを保護する必要はありません。ただし、いくつかのオプションがあります。

  1. クライアントでパッケージ化された証明書を使用して、サーバーで自分自身を検証できる人に出荷する独自のクライアント アプリケーションを構築します。たとえば、そのデバイス用にビルドする場合、iOS にはこの種の機能があります。
  2. ブラウザに「インストール」され、REST API との通信時に使用される証明書をダウンロードする機能を提供します。
  3. ハンドシェーク プロトコルのようなものを使用して、クライアントが最初の要求を行いたいときにそれが言うようにします。「こんにちは、私はクライアントです。チャットできますか?」そして、サーバーは「次の X 分間はい、ただし、YYYYYY を教えてくれるたびに必ずこのキーを送信してください」と応答します ( iOS 以外のデバイスではSecureUDIDなどを使用できます)。

おそらく他にもありますが、基本的な考え方は理解できます。繰り返しになりますが、リソースに承認が必要ない場合は、その REST API を保護する必要はありません。この REST API または提供している機能を介して公開しているデータの種類をお尋ねしてもよろしいですか? それはより良い答えを提供するのに役立つかもしれません。

于 2012-11-27T07:21:39.853 に答える
1

承認が必要です。これらの API へのアクセスを、一部のエージェント (モバイル クライアント) やユーザーのみに許可する必要があります。

この問題を解決するには、識別が必要です。つまり、サーバーが誰が誰であるか (または何が何であるか) を識別して、正しい決定を下すことができるようにする方法です。

セキュリティをどの程度重視しているかに応じて、何らかの形式の ID を提供するさまざまな方法があります。

最も単純なのは、モバイル クライアントに固有のユーザー エージェント文字列です。しかし、それは簡単に偽装できます。クライアント ベースの「シークレット」は偽造するのが少し難しく、モバイル クライアント コードにある種のシークレットまたはキーを埋め込みます。非常に複雑で秘密にすることはできますが、ramsinb が指摘したように、この方法ではセキュリティを確保できません。クライアントと一緒に出荷する秘密を保証できるようにする必要があるためです (コード、アルゴリズム、または他のファンシーな構造) を侵害したり、リバース エンジニアリングしたりすることはできません。クライアントを制御していない場合は発生しません。

そこから、3つの選択肢:

  1. セキュリティは特に必要ありません。気にしないでください
  2. セキュリティは実際には必要ありませんが、API へのアクセスを正当なユーザー/エージェント、または保護のハッキングに時間を投資する準備ができている人のいずれかに制限する必要があります。特定のユーザー エージェントまたはクライアントに埋め込まれたシークレットを使用してください。投資しないでください。とにかくそれを取得するために本当にアクセスしたい人をブロックしないので、それに大いに興味があります
  3. セキュリティは必要です-そして、それがログイン/パスワード、ユーザー固有(デバイス固有?)のキー、OpenIDなどであるかどうかにかかわらず、認証を回避する方法はないと思います...何があっても、追加する必要がありますユーザーの負担はある程度軽減されますが、認証の永続化 (Cookie、ストレージなど) を許可することで負担を軽減できます。
于 2012-11-27T17:59:15.543 に答える