2012-05-10 18 views
2

私は、データを提供するSelf Hosted ServiceStack APIを備えたASP.NET MVC 3アプリケーションを持っています。私はweb.configファイルAPIの場所のパスを追加した後、APIは、私のコードから呼び出すことで、うまく機能:ASP.NET MVC 3 APIアクセスを制限する

<location path="api"> 
    <system.web> 
     <authorization> 
      <allow users="*"/> 
     </authorization> 
    </system.web> 
</location> 

私が持っている問題は、アプリケーションがAPIを実行しているときは、ブラウザを介してアクセス可能であることである - 私ができますブラウザにhttp:\ localhost:xxxx \ apiと入力します。自己ホスト型APIへのアクセスを制限し、MVC 3アプリケーション内で引き続き呼び出すことができるが、ユーザーがブラウザ経由でAPIにアクセスできないようにするには、どのような方法が良いでしょうか?

今後、APIの一部の領域を公開して公開したいと考えています。

<location path="api"> 
    <system.web> 
     <authorization> 
      <allow users="api_user" /> 
     </authorization> 
    </system.web> 
</location> 

のみapi_userでアクセスできるようにあなたのAPIを設定します。

答えて

2

注:ServiceStackに組み込まれたAuthorization and Authenticationサポートは独立しており、ASP.NETの認証とは切り離されています。

あなたは、一般的の一つ以上が含まれている基本クラスから継承することで、すべてのサービスへのアクセスを制限することができます。

  • [認証] - のみ[RequiredRole]認証されたユーザー
  • へのアクセスを許可する - のみこれらの属性:のみ指定された許可

注意してユーザーにアクセスを許可する - [RequiredPermission]

  • 指定されたロール内のユーザーにアクセスを許可ServiceStackControllerを継承するMVCコントローラまたは[ExecuteServiceStackFilters]属性でマークされたコントローラでも動作します。

    Social Bootstrap Apiサンプルプロジェクトでこれらの属性を使用するMVC + ServiceStackデモを調べることができます。

    アクセスを一般的に制限するもう1つの方法は、すべてのリクエストで実行されるグローバルRequest filterを登録することです。

  • 2

    一つの可能​​性は、APIにアクセスするための特定のユーザーを使用することです。この方法では、ブラウザ内の他の認証されたユーザーはこのAPIにアクセスできなくなります。 ASP.NET MVC 3アプリケーションでは、HTTPリクエストをAPIに送信する前に、指定されたユーザーとの認証チケットを作成できます。

    また、web.configの<location>タグを使用してASP.NET MVCアプリケーションの権限を制御することは非常に悪い考えです。これは、あなたがいくつかのURL(api)に頼っているという理由によるものです。しかし、ASP.NET MVCはルートで動作します。したがって、保護する対応するコントローラ/アクションを修飾するには、[Authorize]またはカスタム認可属性を使用する必要があります。このようにして、承認はルーティング設定に依存しなくなりました。

    別の可能性は、カスタムオーサライザ属性implement an access tokenを使用することです。