aspxページへのアクセスを制限するのは簡単です。コードビハインドでロールチェックロジックを使用するだけです。しかし、写真のようなリソースファイルには、役割チェックロジックを配置するためのコードがありません。アクセスを制限するにはどうすればよいですか?
1 に答える
まず、IISを設定する必要があります。IIS7 +をお持ちの場合は、簡単です。アプリプールをクラシックから統合パイプラインに変更します。これにより、管理対象モジュールとハンドラーを静的リソースファイルに適用できます。IIS6を使用している場合は、この記事を参照してください。
次に、web.config(IIS7の場合)でこの設定を確認する必要がある場合があります。
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
FormsAuthのようなものは、ASPXなどの場合と同じように機能するはずです。つまり、たとえばweb.configを使用することによってのみ、許可されたユーザーへのパスを制限できます。
アップデート
以下のApertureのコメントに応えて:
を使用する以外にRoleProviders
、ASP.NETは、Windows認証を使用するときにユーザーが属するグループを読み取るか、アプリケーション内の現在のIPrincipalを置き換えることによって、できればで手動で役割を変更することにより、プリンシパルの役割を把握できますAuthenticateRequest
。
Global.asax.cs
public void Application_AuthenticateRequest(object sender, EventArgs e)
{
var application = sender as HttpApplication;
var context = application.Context;
if (!context.User.Identity.IsAuthenticated) return; // if the user hasn't been authenticated by another module such as FormsAuth, don't do anything further
string[] roleNames = FindRolesForUser(context.User.Identity.Name); // this method you will create to figure out what roles the specified user has
context.User = new GenericPrincipal(new GenericIdentity(context.User.Identity.Name), roleNames); // updates the current principal.
}
さて、上記で指定した役割を確認する限り、いくつかの方法があります。JPG、GIF、JSなどで終わるパスを検索するカスタムHttpModuleを作成し、単にチェックすることができますcontext.User.IsInRole
。location
また、authorization
web.configでとを使用することもできます。
<location path="images">
<system.web>
<authorization>
<allow users="?"/> <!-- or perhaps <allow roles="Admins" /> it's up to you -->
</authorization>
</system.web>
</location>
つまり、統合パイプラインを構成するか、静的リソースをASP.NET ISAPIモジュールにマップするまで、静的リソースへの要求中にマネージコードを実行することはできません。だから、私の答えは適切です。