Hallo zusammen,
ich habe eine
Ich habe ein Video von Nick Chapsas gefunden, das speziell auf .NET 5 eingeht. Durch den im Video gezeigten Code wird der "Authorize"-Button im Swagger sichtbar, aber beim Versuch, mich einzuloggen, kann ich mich nur entweder sofort wieder ausloggen oder den Dialog abbrechen (wie im Bild zu sehen). Das Einloggen funktioniert nicht.
Ein Unterschied zu dem Video ist, dass er ein
Hier einmal die komplette Startup.cs:
Und in AppSettings.json:
ich habe eine
ASP.NET Core Web API
in .NET 5
erstellt und arbeite gerade an der Implementierung der Autorisierung
. Ich verwende dazu JWTBearer
. Ich habe den ganzen Nachmittag damit verbracht, verschiedene Quellen zu durchsuchen und Videos anzusehen. Dabei ist mir aufgefallen, dass es immer wieder Unterschiede gibt – die in den Quellen beschriebenen oder gezeigten Objekte und Methoden werden vom Compiler nicht immer erkannt.Ich habe ein Video von Nick Chapsas gefunden, das speziell auf .NET 5 eingeht. Durch den im Video gezeigten Code wird der "Authorize"-Button im Swagger sichtbar, aber beim Versuch, mich einzuloggen, kann ich mich nur entweder sofort wieder ausloggen oder den Dialog abbrechen (wie im Bild zu sehen). Das Einloggen funktioniert nicht.
Ein Unterschied zu dem Video ist, dass er ein
Dictionary<string, IEnumerable<string>>
erstellt hat und es als Argument in AddSecurityRequirement()
verwendet hat. Diese Methode hat bei mir nicht funktioniert. Stattdessen habe ich den folgenden Code verwenden müssen:Hier einmal die komplette Startup.cs:
C#-Quellcode
-
- using Identity;
- using Microsoft.AspNetCore.Authentication.JwtBearer;
- using Microsoft.AspNetCore.Builder;
- using Microsoft.AspNetCore.Hosting;
- using Microsoft.Extensions.Configuration;
- using Microsoft.Extensions.DependencyInjection;
- using Microsoft.Extensions.Hosting;
- using Microsoft.IdentityModel.Tokens;
- using Microsoft.OpenApi.Models;
- using System.Collections.Generic;
- namespace myNamespace
- {
- 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.AddControllers();
- services.AddScoped<ManagementRepository.IManagement, ManagementRepository.Management>();
- services.AddHostedService<AccountRepository.AccountLoaderBackgroundService>();
- var jwtSettings = new JwtSettings();
- Configuration.Bind(nameof(jwtSettings), jwtSettings);
- services.AddSingleton(jwtSettings);
- services.AddAuthentication(x =>
- {
- x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
- x.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
- x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
- }).AddJwtBearer(x =>
- {
- x.SaveToken = true;
- x.TokenValidationParameters = new TokenValidationParameters
- {
- ValidateIssuerSigningKey = true,
- IssuerSigningKey = new SymmetricSecurityKey(System.Text.Encoding.ASCII.GetBytes(jwtSettings.Secret)),
- ValidateIssuer = false,
- ValidateAudience = false,
- RequireExpirationTime = false,
- ValidateLifetime = true
- };
- });
- services.AddSwaggerGen(c =>
- {
- c.SwaggerDoc("v1", new OpenApiInfo { Title = "myAPIName", Version = "v1" });
- //var security = new Dictionary<string, IEnumerable<string>>
- //{
- // {"Bearer", new string[0] }
- //};
- c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
- {
- Description = "JWT authorization header using the bearer scheme",
- Name = "Authorization",
- In = ParameterLocation.Header,
- Type = SecuritySchemeType.ApiKey
- });
- var temp = new OpenApiSecurityRequirement();
- var temp1 = new OpenApiSecurityScheme
- {
- Description = "JWT authorization header using the bearer scheme",
- Name = "Authorization",
- In = ParameterLocation.Header,
- Type = SecuritySchemeType.ApiKey
- };
- temp.Add(temp1, new List<string>());
- //temp.Add("Bearer", new List<string> { string.Empty });
- c.AddSecurityRequirement(temp);
- });
- }
- // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
- public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
- {
- if (env.IsDevelopment())
- {
- app.UseDeveloperExceptionPage();
- app.UseSwagger();
- app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "MyApiName v1"));
- }
- app.UseHttpsRedirection();
- app.UseRouting();
- app.UseAuthentication();
- app.UseAuthorization();
- app.UseEndpoints(endpoints =>
- {
- endpoints.MapControllers();
- });
- }
- }
- }
Und in AppSettings.json:
"JwtSettings": {
"Key": "MeinKey"
},