Glimpse предоставляет несколько различных механизмов для настройки безопасности.
Первым, как вы упомянули, является использование встроенных функций безопасности ASP.NET. Для этого в вашем web.config
вы можете добавить <location>
элемент, например:
<location path="glimpse.axd">
<system.web>
<authorization>
<deny users="*"/>
<allow roles="Admin"/>
</authorization>
</system.web>
</location>
и теперь только пользователи в администратора роль будет иметь возможность доступа к Glimpse.axd
.
Кстати, путь не должен быть /Glimpse.axd
, это только значение по умолчанию. Вы можете переместить местоположение HttpHandler на URL-адрес известен только вам и вашей команды, сделав несколько изменений в вашем web.config
:
<!-- configure system.webServer and/or system.web depending on your ISS configuration -->
<system.webServer>
<handlers>
<add name="Glimpse" path="unknownLocation.axd" ... />
</handlers>
</system.webServer>
<system.web>
<httpHandlers>
<add path="unknownLocation.axd" ... />
</httpHandlers>
</system.web>
<!-- then just configure Glimpse -->
<glimpse defaultRuntimePolicy="On" endpointBaseUri="~/unknownLocation.axd">
Второй подход заключается в создании IRuntimePolicy
. Политики времени выполнения могут обеспечить доступ к ресурсам (которые обслуживаются, хотя Glimpse.axd
), пока вы возвращаете RuntimeEvent.ExecuteResource
из их ExecuteOn
. К сожалению для вас, Glimpse предназначен для игнорирования IRuntimePolicy
для запросов к ресурсу по умолчанию (который находится в Glimpse.axd
). Хорошей новостью является то, что вы можете изменить ресурс по умолчанию. Вот так:
- Создайте или обновите класс, чтобы он реализовал
IServiceLocator
.
Обновить web.config
, чтобы указать на реализацию локатора вашего сервиса.
<glimpse defaultRuntimePolicy="On" endpointBaseUri="~/Glimpse.axd" serviceLocatorType="YourNamespace.GlimpseLocator, YourAssembly">
Теперь Glimpse знает о вашем локатора и спросит его для любого типа, что ему нужно, в том числе для ресурса по умолчанию.
- Внесите
IResource
. Я покажу пример того, как создать тот, который просто перенаправляет пользователя на обычную конфигурационную страницу (которая больше не является ресурсом по умолчанию), но вы могли бы сделать все, что захотите.
- Теперь звонки непосредственно
/Glimpse.axd?n=glimpse_config
будут уважать всеIRuntimePolicy
«S вы имеете в месте, и призывает к Glimpse.axd
перенаправлении туда в любом случае.
Вот код:
// Create the ServiceLocator that is referenced in web.config
public class GlimpseLocator : IServiceLocator
{
public T GetInstance<T>() where T : class
{
if (typeof(T) == typeof(IResource))
return new SecurityResource() as T;
return null;
}
public ICollection<T> GetAllInstances<T>() where T : class
{
return null;
}
}
//Implementation of new default resource that just redirects
public class SecurityResource : IResource
{
public string Name
{
get { return "Security"; }
}
public IEnumerable<ResourceParameterMetadata> Parameters
{
get { return Enumerable.Empty<ResourceParameterMetadata>(); }
}
public IResourceResult Execute(IResourceContext context)
{
return new RedirectResourceResult("/Glimpse.axd?n=glimpse_config");
}
}
// Your custom runtime policy
public class CustomPolicy : IRuntimePolicy
{
public RuntimeEvent ExecuteOn
{
get { return RuntimeEvent.ExecuteResource; }
}
public RuntimePolicy Execute(IRuntimePolicyContext policyContext)
{
//Perform any logic you like and return RuntimePolicy.On or RuntimePolicy.Off
return RuntimePolicy.Off;
}
}
Теперь, когда пользователи идут к Glimpse.axd
они получают перенаправлены на Glimpse.axd?n=glimpse_config
, которые будут либо показать стандартную страницу конфигурации или политики * время выполнения не позволяет выполнение ресурса по имени 'glimpse_config'. * message - в зависимости от вашего IRuntimePolicy
.
Итак, как я уже сказал, используемый нами прецедент, который мы оптимизировали, является первым, чтобы использовать встроенные механизмы безопасности ASP.NET. Glimpse не привязана к этой модели, но вам просто нужно проскочить через несколько обручей, чтобы настроить ATM.
Относительно примечания, мы собираемся быть greatly improving the configuration story в Glimpse 2.0, который в данный момент находится в процессе.
Я смотрю на реализацию второго варианта, который вы указали выше, чтобы иметь пользовательскую RuntimePolicy, но (я уверен, что здесь что-то не хватает). Я не могу получить фактическую страницу редактирования. Метод Execute для CustomPolicy, похоже, не срабатывает. Я правильно перенаправляю n = glimpse_config, а политика «Runtime» не позволяет выполнять ресурс с именем «glimpse_config». » сообщение, но независимо от того, что я ввел в метод Execute, он все еще не отображается. Это что-то мне не хватает? Это точка останова в ExecuteOn. – Arowin
Мы коротко замыкаем оценку политик, как только один говорит, что Glimpse выключен. Зайдите в журнал Glimpse, чтобы узнать, какая политика отключает Glimpse. – nikmd23
Спасибо, Ник. Просто мысль: для меня проще реализовать пользовательский 'HttpModule' и сделать там всю необходимую проверку. – Alex