У меня есть сценарий, в котором мне нужно создать JWT в приложении javascript вручную, поэтому я использовал здесь код
https://codepen.io/jpetitcolas/pen/zxGxKN
и в моем asp. net core У меня есть простой контроллер значений с функцией, украшенной Authorize
[Authorize]
[Route("GetValues")]
[HttpGet]
public IEnumerable<string> GetValues()
{
return new string[] { "value1", "value2" };
}
, а в моем startup.cs у меня есть
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(x =>
{
x.RequireHttpsMetadata = false;
x.SaveToken = false;
x.TokenValidationParameters = new TokenValidationParameters
{
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("My very confidential secret!!!")),
ValidateIssuerSigningKey = true,
ValidateLifetime = false, //set this to true when a reasonable lifetime has been determined based on jwt generation
ValidateIssuer = false,
ValidateAudience = false
};
});
services.AddControllers();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseAuthentication();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
, как вы можете видеть i Я использую тот же секрет в токене и пытаюсь проверить его в ядре asp. net, но когда я использую почтовый человек для вызова https://localhost: 44364 / GetValues с ключом авторизации, установленным на "Bearer" i получить 401-UnAuthorized. Я что-то упускаю ?
любая идея, что я здесь делаю не так.
ОБНОВЛЕНИЕ
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.AddAuthorization();
services.AddControllers();
// var hmac = new HMACSHA256(System.Text.Encoding.ASCII.GetBytes("My very confidential secret!!!"));
// var symKey = new Microsoft.IdentityModel.Tokens.SymmetricSecurityKey(hmac.Key);
var secretKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("My very confidential secret!!!"));
var signinCredentials = new SigningCredentials(secretKey, SecurityAlgorithms.HmacSha256Signature);
services.AddAuthentication(opt =>
{
opt.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
opt.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.RequireHttpsMetadata = false;
options.SaveToken = true;
options.TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuer = false,
ValidateAudience = false,
ValidateLifetime = false,
ValidateIssuerSigningKey = true,
ClockSkew = System.TimeSpan.Zero,
IssuerSigningKey = signinCredentials.Key
};
});
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// app.UseMiddleware<AuthenticationMiddleware>();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
// ...
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthentication(); // this one first
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
Обновление 2
, даже если я установил ValidateIssuerSigningKey = false означает, что я даже не хочу проверять ключ даже тогда я получаю 401 Неавторизованный. , чтобы воссоздать , мы можем просто создать пробел. net основной проект api с контроллером образцов значений и скопировать и вставить мой Startup.cs, а затем токен-носитель из https://codepen.io/jpetitcolas/pen/zxGxKN, который eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTMzNywidXNlcm5hbWUiOiJqb2huLmRvZSJ9.EvTdO JS -fbffGHLyND3BMDwWE22zUBOCRspPZEHlNEw
1038 * и ласты просто использовать почтальоном как этот 1040 *
![enter image description here](https://i.stack.imgur.com/3n7qP.png)