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 на реализацию вашего локатора сервисов.
<glimpse defaultRuntimePolicy="On" endpointBaseUri="~/Glimpse.axd" serviceLocatorType="YourNamespace.GlimpseLocator, YourAssembly">
Теперь Glimpse знает о вашем локаторе и запросит у него любой тип, который ему нужен, включая ресурс по умолчанию.
- Реализовать
IResource
. Я покажу пример того, как создать страницу, которая просто перенаправляет пользователя на обычную страницу конфигурации (которая больше не является ресурсом по умолчанию), но вы можете заставить ее делать все, что захотите.
- Теперь вызовы непосредственно на
/Glimpse.axd?n=glimpse_config
будут учитывать все IRuntimePolicy
, которые у вас есть, и вызовы на 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'.* - в зависимости от вашего IRuntimePolicy
.
Итак, как я уже сказал, вариант использования, для которого мы оптимизировали, является первым, в котором используются встроенные в ASP.NET механизмы безопасности. Тем не менее, Glimpse не привязан к этой модели, вам просто нужно пройти через несколько обручей, чтобы настроить банкомат.
В связи с этим мы собираемся значительно улучшить историю конфигурации в Glimpse 2.0, которая в настоящее время находится в процессе. .
person
nikmd23
schedule
12.09.2013