クライアントに対して同様のことをしなければなりませんでしたが、Azureポータル自体からサイトへのアクセスを制限する方法を見つけることができませんでした。IPアドレス制限オプションを使用しましたが、アプリケーション自体のコードを使用して実行しました。私のアプリケーションはすでにフォーム認証を使用していたので、サインインアクションでIPアドレスチェックを実行できました。
あなたの場合、カスタムアクションフィルターをお勧めします。フィルタでチェックを実行し、IPアドレスが許可されていない場合は、http 401(未承認)ステータスコードを返します。
と呼ばれるアプリ設定を作成します。この設定AllowedIpAddresses
では、許可されたIPアドレスのカンマ区切りのリストを追加できます。チェックを実行するときに、AllowedIpAddresses
空または存在しない場合にすべてのトラフィックを許可するようにサイトを設定できます。そうすれば、本番環境ではこの設定を無視でき、すべてのトラフィックがデフォルトで許可されます。Azureポータル内のサイトごとにカスタムアプリ設定をセットアップできます。
カスタムフィルターは次のようになります。私はこれをテストしていません!
public class AccessRestrictionFilterAttribute : ActionFilterAttribute
{
// simple wrapper around ConfigurationManager.AppSettings for testability
private readonly IAppSettingsHandler appSettingsHandler;
public AccessRestrictionFilterAttribute(IAppSettingsHandler appSettingsHandler)
{
this.appSettingsHandler = appSettingsHandler;
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var isAllowed = false;
var userIpAddress = filterContext.HttpContext.Request.UserHostAddress;
if (appSettingsHandler.AllowedIpAddresses.Split(new[] { ',' }).Any(x => x == userIpAddress))
{
isAllowed = true;
}
if (!isAllowed)
{
filterContext.Result = new HttpUnauthorizedResult();
}
base.OnActionExecuting(filterContext);
}
}