Ich versuche Authentifizierung mit Identity in meinem ASP.NET Core 2.0-Projekt zu implementieren, und es scheint nicht zu funktionieren. Das letzte Projekt, in das ich Identity implementiere, war ein ASP.NET MVC 5 Projekt, und die Dinge haben sich wesentlich verändert. Ich habe Core 1.0 und 1.1 übersprungen, also habe ich keine Ahnung, wie es unter diesen gemacht wurde, obwohl ich davon ausging, dass es größtenteils ähnlich ist.ASP.NET Core 2.0-Authentifizierung funktioniert nicht
Ich kann es aber nicht für mich arbeiten. Wenn ich sage, dass es nicht funktioniert, meine ich, dass ich nicht auf eine Login-Seite weitergeleitet werde, obwohl ich nicht autorisiert bin.
Die einzige Anpassung, die ich gemacht habe, ist, meinen eigenen Benutzerspeicher und meine eigene Erweiterung zu implementieren, um Identität ohne die Notwendigkeit einer Rolle hinzuzufügen, da ich keine Rollen verwenden werde. Ich könnte ein paar Anweisungen dazu verwenden, was ich vermasselt habe, weil alles aus meiner Sicht viel zu kompliziert ist. Hier ist der Code, den ich habe bisher:
Startup.cs
public void ConfigureServices(
IServiceCollection services) {
services.AddDbContext<CustomDbContext>();
services.AddTransient<IUserStore<GlobalUser>, CustomUserStore<GlobalUser>>();
services.AddIdentity<GlobalUser>();
services.AddMvc();
}
public void Configure(
IApplicationBuilder app,
IHostingEnvironment env) {
if (env.IsDevelopment()) {
app.UseDeveloperExceptionPage();
} else {
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseAuthentication();
app.UseMvc();
}
ServiceCollectionExtensions.cs
ich nur an der Quelle suchte den eingebauten AddIdentity<TUser, TRole>
und weggelassen, um die Rolle verwandte Sachen, also sollte es hier kein Problem geben, aber vielleicht ...
public static class ServiceCollectionExtensions {
public static IdentityBuilder AddIdentity<TUser>(
this IServiceCollection services,
Action<IdentityOptions> optionsAction = null)
where TUser : class {
services.AddAuthentication(
o => {
o.DefaultAuthenticateScheme = IdentityConstants.ApplicationScheme;
o.DefaultChallengeScheme = IdentityConstants.ApplicationScheme;
o.DefaultSignInScheme = IdentityConstants.ApplicationScheme;
}).AddCookie(
o => {
o.LoginPath = new PathString("/Login");
o.Events = new CookieAuthenticationEvents {
OnValidatePrincipal = SecurityStampValidator.ValidatePrincipalAsync
};
});
services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.TryAddScoped<IUserValidator<TUser>, UserValidator<TUser>>();
services.TryAddScoped<IPasswordValidator<TUser>, PasswordValidator<TUser>>();
services.TryAddScoped<IPasswordHasher<TUser>, PasswordHasher<TUser>>();
services.TryAddScoped<ILookupNormalizer, UpperInvariantLookupNormalizer>();
services.TryAddScoped<IdentityErrorDescriber>();
services.TryAddScoped<ISecurityStampValidator, SecurityStampValidator<TUser>>();
services.TryAddScoped<IUserClaimsPrincipalFactory<TUser>, UserClaimsPrincipalFactory<TUser>>();
services.TryAddScoped<UserManager<TUser>, AspNetUserManager<TUser>>();
services.TryAddScoped<SignInManager<TUser>, SignInManager<TUser>>();
if (optionsAction != null) {
services.Configure(optionsAction);
}
return new IdentityBuilder(typeof(TUser), services);
}
}
Ich dachte, ich müsste den Autorisierungsfilter wie in MVC 5 hinzufügen, aber ich kann es nicht global tun. Wenn ich es auf den Standard-Controller anwenden, erhalte ich die folgende Ausnahme:
Kein AuthenticationScheme wurde angegeben, und es gab keine DefaultChallengeScheme gefunden.
Aber ich dachte, ich würde das Schema in meiner benutzerdefinierten AddIdentity
Methode festlegen? Ich könnte eine Anleitung gebrauchen und ich schätze es, wenn mir jemand auf meine Weise geschickt wird.
Haben passieren Sie das Schema in als Teil des Autorisieren Attribut in der Steuerung? Wie folgt: '[Authorize (AuthenticationSchemes = IdentityConstants.ApplicationScheme)]' oder so ähnlich? Ich weiß nicht, ob 'IdentityConstants.ApplicationScheme' das Enum ist, das Sie benötigen. –
Also habe ich "Identity.Application" als das Schema, wie Sie vorgeschlagen haben, fest programmiert, und jetzt hat sich die Ausnahme in 'No authentication handler ist konfiguriert, um sich für das Schema zu authentifizieren: Identity.Application' geändert. Ich habe eine harte Zeit mit diesen Systemen. Was wäre die richtige Art, ASP.NET einfach mitzuteilen, dass ich Cookie-Authentifizierung mit Identity möchte? – Gup3rSuR4c