2017-08-19 1 views
7

Ich versuche, die Anweisungen zu befolgen here Cookie-Authentifizierung auf meiner Website hinzuzufügen.InvalidOperationException: Nein IAuthenticationSignInHandler konfiguriert ist für das Schema zu behandeln melden Sie sich an: MyCookieAuthenticationScheme

Bisher habe ich hinzugefügt folgendes:

Invoke the UseAuthentication method in the Configure method of the Startup.cs file:

app.UseAuthentication(); 

Invoke the AddAuthentication and AddCookie methods in the ConfigureServices method of the Startup.cs file:

services.AddAuthentication("MyCookieAuthenticationScheme") 
    .AddCookie(options => { 
    options.AccessDeniedPath = "/Account/Forbidden/"; 
    options.LoginPath = "/Account/Unauthorized/"; 
}); 

In meinem Login-Code Ich habe dann

await HttpContext.SignInAsync("MyCookieAuthenticationScheme", principal); 

principle ein ClaimsPrincipal ist.

Als ich auf meiner Website einloggen und die Zeile nennen oben ich den Fehler:

InvalidOperationException: No IAuthenticationSignInHandler is configured to handle sign in for the scheme: MyCookieAuthenticationScheme

Was habe ich verpasst?

Antwort

20

Sie haben angegeben, dass das Standardschema "MyCookieAuthenticationScheme" lauten soll (das ist das erste Argument für AddAuthentication), aber Sie haben keinen Authentifizierungshandler mit diesem Namen hinzugefügt. Wenn Sie AddCookies aufgerufen haben, haben Sie den Handler mit dem Schema "Cookies" hinzugefügt (das ist die Standardeinstellung).

Sie müssen Ihren Code ändern:

services.AddAuthentication("MyCookieAuthenticationScheme") 
    .AddCookie("MyCookieAuthenticationScheme", options => 
    { 
     options.AccessDeniedPath = "/Account/Forbidden/"; 
     options.LoginPath = "/Account/Unauthorized/"; 
    }); 

in diesem Artikel, um besser die Primitiven zu verstehen:

https://digitalmccullough.com/posts/aspnetcore-auth-system-demystified.html

+0

Vielen Dank! Ich habe den ganzen Tag versucht, das herauszufinden. Viele Beispiele da draußen, aber sie vermissen den Authentifizierungshandler. – Tom

0

Versuchen Sie, den Ort des Anrufs ändern services.AddAuthentication( Das hat mir geholfen.

public IServiceProvider ConfigureServices(IServiceCollection services) 
{ 
    ... 
    var builder = new ContainerBuilder(); 
    builder.RegisterModule(new HowResolveDependencies()); 

    services.AddTransient<IExceptionHandler, ExceptionToResponseWriter>(); 

    builder.Populate(services); 

    services.AddAuthentication(AuthConsts.MainAuthScheme) 
       .AddCookie(
    ... 
} 

In meinem Projekt, lösten das Problem services.AddAuthentication vor builder.Populate(services) platzieren.

Verwandte Themen