Я создаю ASP. NET Базовое приложение WebAPI и пытаюсь обеспечить аутентификацию токена для моего приложения:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services
.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer("Bearer", jwtBearerOptions =>
{
jwtBearerOptions.TokenValidationParameters = new TokenValidationParameters
{
//ValidIssuer = "Issuer"
ValidateIssuer = false,
////ValidAudience = "WishlistAppClient",
//ValidateAudience = false,
////ClockSkew = TimeSpan.FromSeconds(5),
//ValidateLifetime = false,
//RequireExpirationTime = false,
//RequireSignedTokens = false,
};
});
services.AddMvc().AddJsonOptions(options =>
{
options.SerializerSettings.ContractResolver = new DefaultContractResolver()
{
NamingStrategy = new SnakeCaseNamingStrategy()
};
options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
});
services.AddDbContext<SchemaContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection"), optionBuilder => optionBuilder.MigrationsAssembly("EventManager.DAL")
));
new DALRegistration().ConfigureServices(services);
var mappingConfig = new MapperConfiguration(configuration =>
{
configuration.AddProfile(new MappingProfile());
});
IMapper mapper = mappingConfig.CreateMapper();
services.AddSingleton(mapper);
services
.AddIdentity<SystemUser, SystemRole>()
.AddEntityFrameworkStores<SchemaContext>()
.AddDefaultTokenProviders();
services.AddScoped<IUserManager, UserManager>();
services.AddScoped<ILoginProvider, LoginProvider>();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddSpaStaticFiles(configuration =>
{
configuration.RootPath = "ClientApp/dist";
});
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" });
c.DescribeAllEnumsAsStrings();
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseAuthentication();
app.UseMvc(routes =>
{
routes.MapWebApiRoute("DefaultApi", "api/{controller}/{id?}");
});
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseSpaStaticFiles();
var todayDate = DateTime.Now.ToShortDateString().Replace('/', '.');
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
c.DocExpansion(DocExpansion.None);
});
loggerFactory.AddFile(Path.Combine(Directory.GetCurrentDirectory(), "LogInformation", $"{DateTime.Now.ToShortDateString().Replace('/','.')}.txt"));
var logger = loggerFactory.CreateLogger("New Logger");
app.Use(async (context, next) =>
{
logger.LogTrace("Processing request {0}", context.Request.Path);
await next.Invoke();
});
app.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
spa.Options.StartupTimeout = new TimeSpan(0, 2, 0);
if (env.IsDevelopment())
{
spa.UseAngularCliServer(npmScript: "start");
}
});
}
}
Код API защищен [Authorize (AuthenticationSchemes = "Bearer") ] Когда я отправляю запрос с любым токеном, я всегда получаю 401. Беда в том, что я отключил всю проверку токена, но это не помогает.
В Почтальоне есть картинка запроса
Тело ответа пустое. Заголовки ответа (если вы не можете загрузить изображение):
- HTTP / 1.1 401 Несанкционированный
- Сервер: Kestrel
- WWW-Authenticate: ошибка на предъявителя = "invalid_token ", error_description =" Ключ подписи не найден "
- X-SourceFiles: =? UTF-8? B? RDpcUmVsZWFzZVxldmVudG1hbmFnZXJcRXZlbnRNYW5hZ2VyXEV2ZW50TlX * * * * * * * * * NET
- Дата: чт, 20 фев. 2020 г. 11:47:54 GMT
- Соединение: закрыть
- Длина содержимого: 0
Запрос: