He actualizado ASP.NET 5 marco beta-8 paquetes con RC en anteriormente de trabajo de la aplicación. Después de que lo tengo ejecutando el siguiente error en el proceso de inicio:

InvalidOperationException: Sin autenticación controlador está configurado para manejar el esquema: Automático
Microsoft.AspNet.Http.La autenticación.Interna.DefaultAuthenticationManager.d__12.MoveNext()

var defaultPolicy =
    new AuthorizationPolicyBuilder()
    .RequireAuthenticatedUser()
    .Build();

services.AddMvc(setup =>
{
    setup.Filters.Add(new AuthorizeFilter(defaultPolicy)); //Error occurs here
});

Si alguien tuvo un problema similar, agradecería tu idea o solución en lo que podría haber salido mal. La explicación de esta excepción también es apreciado.

De inicio.cs

using Autofac;
using Autofac.Extensions.DependencyInjection;
using Microsoft.AspNet.Authorization;
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.Http;
using Microsoft.AspNet.Mvc.Filters;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.PlatformAbstractions;
using SuperUserMVC.Configuration;
using SuperUserMVC.Extensions;
using SuperUserMVC.GlobalModules;
using System;
namespace SuperUserMVC
{
public class Startup
{
public IConfigurationRoot Configuration { get; set; }
//Entry point for the application.
public static void Main(string[] args) => WebApplication.Run<Startup>(args);
public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv)
{
var builder = new ConfigurationBuilder()
.SetBasePath(appEnv.ApplicationBasePath)
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
}
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.Configure<AppSettingsBase>(Configuration.GetSection("AppSettingsBase"));
services.Configure<ConnectionString>(Configuration.GetSection("ConnectionString"));
services.AddSqlServerCache(cache =>
{
cache.ConnectionString = Configuration.Get<string>("ASPState:ConnectionString");
cache.SchemaName = Configuration.Get<string>("ASPState:Schema");
cache.TableName = Configuration.Get<string>("ASPState:Table");
});
services.AddSession(session =>
{
session.IdleTimeout = TimeSpan.FromMinutes(120);
});
//Only allow authenticated users.
var defaultPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
//Add MVC services to the services container.
services.AddMvc(setup =>
{
setup.Filters.Add(new AuthorizeFilter(defaultPolicy));
});
var builder = new ContainerBuilder();
builder.RegisterModule(new AutofacModule());
builder.Populate(services);
var container = builder.Build();
return container.Resolve<IServiceProvider>();
}
public void Configure(IApplicationBuilder app, IHttpContextAccessor httpContextAccessor)
{
//Catch unhandled exception in pipeline.
bool isProductionEnvironment = Configuration.Get<bool>("environmentVariables:isProductionEnvironment");
app.UseCustomUnhandledException(isProductionEnvironment, Configuration.Get<string>("defaultErrorPagePath"));
//Log requests.
app.UseVisitLogger(isProductionEnvironment);
//Session must be used before MVC routes.
app.UseSession();
//Configure the HTTP request pipeline.
app.UseCookieAuthentication(options =>
{
options.AuthenticationScheme = "Cookies";
options.LoginPath = new PathString("/Account/Login/");
options.AccessDeniedPath = new PathString("/Account/Forbidden/");
options.CookieName = "MyCookie";
options.AutomaticAuthenticate = true;
options.SessionStore = new MemoryCacheSessionStore();
});
AutoMapperInitializer.Init();
app.UseStaticFiles();
//Route configuration.
app.UseMvc(routes =>
{
routes.MapRoute(
name: "AreaDefault",
template: "{area:exists=Demo}/{controller=Home}/{action=Index}/{id?}"
);
routes.MapRoute(
name: "Default",
template: "{controller=Home}/{action=Index}/{id?}"
);
});
}
}
}
  • Acabo de empezar a desarrollar con asp.net con la última versión beta (creado un proyecto nuevo y mejorado un poco) y también tuvo problemas después de actualizar a la RC, porque han cambiado varias BASE de las cosas. Por desgracia no tengo encontró ninguna descripción, cómo cambiar los proyectos existentes para que sean compatibles. Así que… yo, a continuación, volver a crear mi proyecto desde cero de una nueva plantilla, para que sea totalmente compatible. Como RC es compatible para la producción de MS, creo (espero) no serán tales cambios en el futuro (versión de lanzamiento Q1 2016).
InformationsquelleAutor msmolcic | 2015-11-20

7 Comentarios

  1. 28

    Pruebe a establecer options.AutomaticChallenge = true; en las opciones de cookies y debería funcionar.

    options.AutomaticAuthentication fue dividida en options.AutomaticAuthenticate y options.AutomaticChallenge. Si el último es de izquierda a false, se produce una excepción porque no la autenticación de middleware maneja el reto aplicados por la autorización de filtro.

    • Gracias una vez más, esta solucionado mi problema! 🙂
    • Lo que si no el uso de Cookies?
    • Me puse directamente a las opciones de autenticación de Google
    • No hay opciones.AutomaticChallenge en asp.net core 2.0
  2. 49

    Esperemos que esto ayude a alguien más porque acabo de pasar un montón de tiempo tratando con este error, aunque me había propuesto AutomaticChallenge = true.

    Resulta que usted va a obtener el mismo error si pones app.UseIdentity(); después de app.UseMvc(routes => ...). Ahora que sé que la respuesta es obvia. Es por todo esto middleware que sucede en el orden que desee agregar.

    Esto hace que el «Sin autenticación controlador está configurado» error:

        public void Configure(...)
    {
    app.UseMvc(routes => { routes.MapRoute(...) }; );
    app.UseIdentity();
    }

    Esto no causa el error:

        public void Configure(...)
    {
    app.UseIdentity();
    app.UseMvc(routes => { routes.MapRoute(...); });
    }
    • Gracias. El mismo parece aplicar a Uapp.UseOpenIdConnectAuthentication() y de la aplicación.UseCookieAuthentication()
    • Después de un año sigue siendo válida para mí. Thx
    • Mi error fue este orden de llamadas (desde que se burlaba de autenticación para las pruebas de integración). Yo nunca habría adivinado! Gracias!
    • guarda mi tiempo! gracias!
  3. 20

    Poner esto en el método Configure ().

            app.UseIdentity();
    • Creo que te refieres Configure, no ConfigureServices.
    • Tengo esta línea, pero sigue recibiendo el error…
  4. 6

    Se solucionó el problema para mí, asegurándose de que las cookies esquema fue nombrado constantemente allí donde se hace referencia. por ejemplo:

    public void ConfigureServices(IServiceCollection services)
    {
    //if using IdentityServer4
    var builder = services.AddIdentityServer(options =>
    {
    options.AuthenticationOptions.AuthenticationScheme = Constants.DefaultCookieAuthenticationScheme;
    ...
    })
    services.AddIdentity<MyUser, IdentityRole>(options =>
    {
    options.Cookies.ApplicationCookie.AuthenticationScheme = Constants.DefaultCookieAuthenticationScheme;
    ...
    }
    }
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
    ...
    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {
    AuthenticationScheme = Constants.DefaultCookieAuthenticationScheme,
    AutomaticAuthenticate = false,
    AutomaticChallenge = true
    });
    }

    Y a la hora de interactuar con la autenticación de middleware. por ejemplo:

    await HttpContext.Authentication.SignInAsync(Constants.DefaultCookieAuthenticationScheme, cp);
    • Después de la ejecución de la primera respuesta sobre «opciones».AutomaticAuthentication fue dividida en opciones.AutomaticAuthenticate y opciones.AutomaticChallenge», he recibido aún el mismo error, pero después de la sustitución de la parte superior de caso de las «Cookies» de la muestra a minúsculas (como fue escrito en otro lugar), mi aplicación se comenzó a trabajar! Muchas gracias!
  5. 3

    Si utiliza app.UseIdentity(); y algunas otras de inicio de sesión de middleware como UseFacebookAuthentication asegúrese de app.UseFacebookAuthentication() es DESPUÉS de app.UseIdentity();.

    • Solucionado mi problema!
  6. 2

    otra posibilidad es que falta la siguiente configuración en configuración de

    app.UseCookieAuthentication();
    • Este es ahora obsoleto
  7. 0

    Aunque es tentador lugar gran parte de nuestras opciones de configuración dentro de la startup.cs archivo, parece que la mejor manera de hacer las cosas es para establecer su app.UseCookieAuthentication() – sans opciones – dentro de la startup.cs archivo y, a continuación, coloque todos los de la ‘opciones’ y otros detalles en un archivo separado.

    Algo así como lo que estábamos haciendo con la forma en la Global.asax archivo tenía punteros a la App_Start carpeta de archivos en Asp.Net vBefore.

    He sufrido un dolor similar al intentar configurar EF/Sql en el startup.cs, y moviendo todas las «opciones» fuera de startup.cs las cosas funcionan mucho mejor.

    TAMBIÉN: tomar nota de las Fredy Wenger comentario a tu pregunta que señala el «cambio de nombre» de muchos de los espacios de nombres de la v-8beta a v-RC1-final.

Dejar respuesta

Please enter your comment!
Please enter your name here