2

データを提供する自己ホスト型 ServiceStack API を備えた ASP.NET MVC 3 アプリケーションがあります。Web.Config に API の場所のパスを追加した後、API は私のコードで呼び出すことができ、うまく機能します。

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

私が抱えている問題は、アプリケーションが実行されているときにブラウザ経由で API にアクセスできることです。ブラウザに http:\localhost:xxxx\api と入力するだけです。自己ホスト型 API へのアクセスを制限して、MVC 3 アプリケーション内で引き続き API を呼び出すことができるが、ユーザーがブラウザー経由で API にアクセスできないようにするための適切なアプローチは何でしょうか?

将来のある時点で、API の一部の領域を公開して、一般にアクセスできるようにしたいと考えていることに注意してください。

4

2 に答える 2

2

1 つの可能性は、API へのアクセスに特定のユーザーを使用することです。

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

次に、 のみがアクセスできるように API を構成しますapi_user。このようにして、ブラウザ内の他の認証済みユーザーはこの API にアクセスできなくなります。ASP.NET MVC 3 アプリケーションでは、API に HTTP 要求を送信する前に、特定のユーザーで認証チケットを作成できます。

また<location>、web.config でタグを使用して ASP.NET MVC アプリケーションで承認を制御することは、非常に悪い考えです。これは、何らかの URL (API) に依存しているためです。ただし、ASP.NET MVC はルートで機能します。したがって、[Authorize]またはカスタム認証属性を使用して、保護する対応するコントローラー/アクションを装飾する必要があります。このようにして、承認はルーティング構成に依存しなくなります。

もう 1 つの可能性は、カスタムの authoriza 属性を使用して、アクセス トークンを実装することです

于 2012-05-10T11:47:31.203 に答える
2

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

次の 1 つ以上を含む基本クラスから継承することにより、すべてのサービスへのアクセスを一般的に制限できます。

  • [認証] - 認証されたユーザーのみにアクセスを許可します
  • [RequiredRole] - 指定されたロールのユーザーにのみアクセスを許可します
  • [RequiredPermission] - 指定された権限を持つユーザーのみにアクセスを許可します

注: これらの属性は、ServiceStackControllerまたは[ExecuteServiceStackFilters]属性でマークされたコントローラーから継承する MVC コントローラーでも機能します。

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

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

于 2012-05-10T16:32:17.680 に答える