У меня есть. NET ядро 2.1 с IdentityServer4. Я установил Swashbuckle 5 и пытаюсь заставить логин Swagger UI работать через неявный поток. Однако, когда я пытаюсь войти с существующим пользователем и ввести правильный пароль, я получаю «Неверное имя пользователя или пароль». Я предполагаю, что это связано с настройкой идентичности, а не Swagger. Если я использую токены Bearer, я могу успешно обменять user / pass на рабочий токен через /connect/token
, однако неявный поток завершается ошибкой, как описано.
Эту ошибку я отследил до файла: Quickstart\Account\AccountOptions.cs
:
public static string InvalidCredentialsErrorMessage = "Invalid username or password";
Любая помощь будет принята с благодарностью. Некоторые базовые c конфиги для запуска:
API Project Startup.cs:
services.AddIdentity<ApplicationUser, IdentityRole>(options =>
{
options.Password.RequireDigit = false;
options.Password.RequireLowercase = false;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireUppercase = false;
options.Password.RequiredLength = 3;
})
.AddEntityFrameworkStores<AskoContext>()
.AddDefaultTokenProviders();
// and also
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
var identityUrl = configuration.GetValue<string>("IdentityUrl");
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.Authority = identityUrl;
options.RequireHttpsMetadata = false;
options.Audience = "askothequeApi";
options.TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "name",
RoleClaimType = JwtClaimTypes.Role,
};
});
// and then:
app.UseIdentityServer();
app.UseHttpsRedirection();
app.UseCors("CorsPolicy");
app.UseAuthentication();
var option = new RewriteOptions();
option.AddRedirect("^$", "swagger");
app.UseRewriter(option);
app.UseStaticFiles();
app.UseMvcWithDefaultRoute();
app.UseSwagger();
app.UseSwaggerUI(options =>
{
options.SwaggerEndpoint("/swagger/v1/swagger.json", "Askotheque Api V1");
options.OAuthClientId("swaggerclient");
options.OAuthAppName("Swagger UI Client");
});
Что касается Startup.cs проекта идентификации:
services.AddMvc();
services.AddIdentityServer()
.AddDeveloperSigningCredential()
//.AddTestUsers(Config.GetUsers())
//.AddAspNetIdentity<ApplicationUser>()
.AddConfigurationStore(options =>
{
options.ConfigureDbContext = b =>
b.UseSqlServer(connectionString, sql => sql.MigrationsAssembly(migrationAssembly));
})
// Operational Store will store our tokens, consents, codes, etc
.AddOperationalStore(options =>
{
options.ConfigureDbContext = b =>
b.UseSqlServer(connectionString, sql => sql.MigrationsAssembly(migrationAssembly));
});
// and
app.UseIdentityServer();
app.UseStaticFiles();
app.UseMvcWithDefaultRoute();