Пытаюсь активировать схему аутентификации токена JWT в .net core web api.Это не активация вообще.
Я настроил Swagger для получения токена и предоставления потребителю доступа API ко всем его контроллерам.Но он просто позволяет каждому получить доступ, а не проверять, существует ли действительный токен.
Я пытался поместить ключевое слово [Authorize] на все контроллеры, но оно все еще не работает.
Здесь я предоставляю свой файл startup.cs
namespace Web.Api
{
public class Startup
{
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfiguration Configuration { get; }
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
services.AddOptions();
services.AddSwaggerDocumentation();
// CORS Configurations
services.AddCors(options =>
{
options.AddPolicy("AllowAllOrigins",
builder =>
{
builder
.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod();
});
});
// Authentication Configurations
services.Configure<TokenManagement>(Configuration.GetSection("Jwt"));
var token = Configuration.GetSection("Jwt").Get<TokenManagement>();
var secret = Encoding.ASCII.GetBytes(token.Key);
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.RequireHttpsMetadata = false;
options.SaveToken = true;
options.TokenValidationParameters = new TokenValidationParameters
{
ClockSkew = TimeSpan.FromMinutes(5),
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = token.Issuer,
ValidAudience = token.Audience,
IssuerSigningKey = new SymmetricSecurityKey(secret)
};
});
services.AddRouting(options => options.LowercaseUrls = true);
services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
services.AddScoped<IUnitOfWork, UnitOfWork>();
services.AddScoped<IUrlHelper>(implementationFactory =>
{
var actionContext = implementationFactory.GetService<IActionContextAccessor>().ActionContext;
return new UrlHelper(actionContext);
});
services.AddVersionedApiExplorer(o => o.GroupNameFormat = "'v'VVV");
services.AddMvcCore()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
.AddFormatterMappings()
.AddJsonFormatters();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApiVersionDescriptionProvider provider)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseCors(x => x.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
app.UseAuthentication();
app.UseSwaggerDocumentation(provider);
app.UseMvc(routes =>
{
routes.MapRoute("API Default", "api/{controller}/{action}/{id?}");
routes.MapRoute("Printers Default", "api/{controller}/{action}/{vendorDriver}/{vendormodel}");
});
}
}
}