2016-12-13 5 views
4

Возможно ли «отключить» аутентификацию в основном приложении asp.net без изменения его логики?Аутентификация «отключить» Asp.net в среде разработки

У меня есть веб-сайт .net, в котором для аутентификации используется внешнее приложение сервера идентификации. В любом случае, я хотел бы быть в состоянии издеваться над аутентификацией, когда я ее разрабатываю (ASPNETCORE_ENVIRONMENT = Development), передавая доступ ко всем действиям, игнорируя атрибуты авторизации.

Можно ли это просто издеваться над некоторыми услугами в сервисе?

ответ

3

Это сложно дать точный ответ без получения более подробной информации о вашем конце, но я уже достиг этого условно регистрации:

  • внешнего промежуточного слоя аутентификации
  • глобальная политика, которая требует аутентификацией запроса

это выглядело что-то вроде:

public class Startup 
{ 
    public Startup(IHostingEnvironment env) 
    { 
     Environment = env; 
    } 

    public IHostingEnvironment Environment { get; } 

    public void ConfigureServices(IServiceCollection services) 
    { 
     services.AddMvc(x => 
     { 
      if (!Environment.IsDevelopment()) 
      { 
       var authenticatedUserPolicy = new AuthorizationPolicyBuilder() 
        .RequireAuthenticatedUser() 
        .Build(); 

       x.Filters.Add(new AuthorizeFilter(authenticatedUserPolicy)); 
      } 
     }); 
    } 

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
    { 
     app.UseStaticFiles(); 

     if (!Environment.IsDevelopment()) 
     { 
      // Register external authentication middleware 
     } 

     app.UseMvc(routes => 
     { 
      routes.MapRoute(
       name: "default", 
       template: "{controller=Home}/{action=Index}/{id?}"); 
     }); 
    } 
} 

В моем случае фильтр авторизации был применен глобально, поэтому для каждого действия приложения MVC требуется аутентифицированный пользователь.

Если у вас есть разные требования - мелкие градации [Authorize] атрибутов на некоторые действия - тогда вы, вероятно, можете достичь того же результата, изменив способ создания связанных политик авторизации. Они вообще не могут содержать никаких требований.

AuthorizationPolicy yourCustomPolicy = null; 
if (Environment.IsDevelopment()) 
{ 
    yourCustomPolicy = new AuthorizationPolicyBuilder().Build(); 
} 
else 
{ 
    yourCustomPolicy = new AuthorizationPolicyBuilder() 
     // chaining appropriate methods to suit your needs 
     .Build(); 
} 
+0

Это выглядит именно то, что я искал. Я проверю его – fra

+0

Это решение может работать с ASP.NET Core 1.x, но в ASP.NET Core 2.0 они меняют конвейер аутентификации. Что работает для меня в версии 2.0, так это https://stackoverflow.com/a/40156927/1118893 – Shabbir

+0

Не могли бы вы сообщить мне, что, по вашему мнению, не работает? Я использую эту технику в ASP.NET Core 2.0 с успехом. –

1

Я нашел решение по этой проблеме на illucIT Blog.

Этот код должен работать:

if (env.IsDevelopment()) { 
    services.AddMvc(opts => 
    { 
     opts.Filters.Add(new AllowAnonymousFilter()); 
    }); 
} else { 
    services.AddMvc(); 
} 
Смежные вопросы