1

アプリには次のアーキテクチャがあります。

jQueryMobile Web アプリ --> から JSON を取得 ---> C# で作成された REST API

IIS 6 の仮想ディレクトリに REST API コードを配置しました。モバイル サイトのコードは、Web サイトのルートで実行されているため、大まかなファイル構造は次のようになります。

inetpub/

    /index.html
    myjavascript.js

    /レスタピ/
      web.config
      Global.asax
      bin/(DLL の束...)

サーバーは、次のような IP 変換 (実際の IP ではありません...) を持つネットワークの背後にあります。例:

Web サーバーの外部 IP: 121.131.141.50 (URL http://mysite.com/)
内部 IP: 10.210.2.5
サブネット: 255.255.255.0

restapiWeb サーバーからのみアクセスできるようにしたいので、IP によってフォルダーへのアクセスを制限しようとしました。私は IIS アプローチを試し、ディレクトリ セキュリティ設定を設定しました。また、ServiceAuthorizationManagerクラスを使用して Http リクエストでリクエスト IP をチェックするアプローチも試しました。
どちらのアプローチでも同じ結果が得られました。Fiddler を介した実際のサービス呼び出しを制限およびテストして、Web サーバー IP (10.210.2.5) 以外の IP から 401 がスローされることを証明することに問題はありませんでした。また、Webサーバーから実行することもできました(これは望ましい設定です)。

ただし、モバイル サイトの JavaScript がそれを呼び出すと、401 の権限がありません。Javascript コードはクライアント側であるため、restapi は呼び出しがクライアントの IP アドレスからのものであると想定しますが、もちろんブロックされています。

呼び出しが JavaScript が置かれている IP からのものであることを確認するきちんとした方法はありますか?

または、全体を処理するためのより良い方法はありますか?! restapi:-/ Web アプリに仮想ディレクトリへのアクセスを明確に許可する方法はありますか?

4

1 に答える 1

2

基本に戻ると、セットアップは次のようになります。

client    <---->    web server
           HTTP

Web サーバーは、クライアントが HTTP プロトコルを介して外部から要求できるファイルをホストします。Web サーバーは、着信要求をフィルタリングする場所でもあります。

client    <---->    | web server
           HTTP     |
                 IP filter

「同じサーバー上」でのみ REST サービスにアクセスできるようにしたい場合は、次のようになります。

client    <---->    web server
           HTTP     ^    |
                    |    |
                    +----+
                     REST

しかし、サーバーが自分自身とのみ対話している場合は、本格的な REST インターフェイスを最初から用意する必要はありません。あなたが実際に意味しているのは、HTML と Javascript をサーバーからダウンロードするクライアントが、REST を介してサーバーに追加のデータを要求する可能性があるということだと思います。

client    <---->    web server
           HTTP

          <-------
        HTML, JS files

       -------->
           AJAX

しかし、ご覧のとおり、クライアントがサーバーから Javascript ファイルをダウンロードし、その Javascript をローカルで実行してから、AJAX 要求をサーバーに送り返すという仕組みになっています。リクエストは常にクライアントから来ます。彼らはしないといけない。これらのリクエストを作成している Javascript コードがどこから来たかは問題ではありません。サーバーからのスクリプトである場合もあれば、ユーザーが手動で入力した場合もあります。AJAX リクエストは HTTP リクエストであり、他のリクエストと同様に HTTP リクエストです。外部から REST サービスにアクセスできるようにするかどうかに関係なく、リクエストを生成したコードでフィルタリングすることはできません。

API を非公開にする場合は、認証を要求して、登録ユーザーのみがアクセスできるようにします。とはいえ、API 自体のパブリック アクセスが低下するわけではありません。

于 2012-09-24T12:59:54.113 に答える