Ответ 1
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
, которые либо отображают стандартную страницу конфигурации, либо политику * Runtime не разрешает выполнение ресурса с именем "glimpse_config". * message - в зависимости от вашего IRuntimePolicy
.
Итак, как я уже сказал, прецедент, для которого мы оптимизировали, является первым, чтобы использовать встроенные механизмы безопасности ASP.NET. Glimpse не привязана к этой модели, но вам просто нужно проскочить через несколько обручей, чтобы настроить ATM.
В соответствующей заметке мы собираемся значительно улучшить историю конфигурации в Glimpse 2.0, которая в данный момент находится в процессе.