Hallo,
ich möchte für meine SPA JWT Tokens verwenden. Das erstellen funktioniert bereits. Die Token werden auch wieder korrekt zurück eingelesen wenn ich es per Hand mache.
Aber ich kann das Attribut Athorized nicht verwenden. Wenn ich das mache, bekomme ich immer nur ein 404 Not found zurück oder meine Homepage...
Wo liegt mein Fehler?
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.RequireHttpsMetadata = false;
options.SaveToken = true;
options.TokenValidationParameters = new TokenValidationParameters()
{
ValidIssuer = Configuration["JwtIssuerOptions:Issuer"],
ValidAudience = Configuration["JwtIssuerOptions:Issuer"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["JwtIssuerOptions:Key"]))
};
});
services.AddAuthorization();
// Connection to Local SQLServer
services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("Database")));
services.AddTransient<DataSeeder>();
services.AddSingleton<IJwtFactory, JwtFactory>();
//Identity
services.AddIdentity<AppUser, IdentityRole>
(o =>
{
// configure identity options
o.Password.RequireDigit = false;
o.Password.RequireLowercase = false;
o.Password.RequireUppercase = false;
o.Password.RequireNonAlphanumeric = false;
o.Password.RequiredLength = 6;
})
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddMvc().AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining<Startup>());
services.AddAutoMapper();
//Add MailKit
services.AddMailKit(optionBuilder =>
{
optionBuilder.UseMailKit(new MailKitOptions()
{
//get options from sercets.json
Server = Configuration["MailKit:Server"],
Port = Convert.ToInt32(Configuration["MailKit:Port"]),
SenderName = Configuration["MailKit:SenderName"],
SenderEmail = Configuration["MailKit:SenderEmail"],
Account = Configuration["MailKit:Account"],
Password = Configuration["MailKit:Password"],
// enable ssl or tls
Security = true
});
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, DataSeeder seeder)
{
loggerFactory.AddFile("Logs/myapp-{Date}.txt");
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
{
HotModuleReplacement = true
});
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseDeveloperExceptionPage();
app.UseStaticFiles();
app.UseAuthentication();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
// here you can see we make sure it doesn't start with /api, if it does,
// it'll 404 within .NET if it can't be found
app.MapWhen(x => !x.Request.Path.Value.StartsWith("/api"), builder =>
{
builder.UseMvc(routes =>
{
routes.MapSpaFallbackRoute(
name: "spa-fallback",
defaults: new { controller = "Home", action = "Index" });
});
});
seeder.SeedAsync().Wait();
}