Конфигурация удостоверения не работает в Docker: проблема со входом в системуC#

Место общения программистов C#
Ответить
Anonymous
 Конфигурация удостоверения не работает в Docker: проблема со входом в систему

Сообщение Anonymous »

В настоящее время я работаю над серверным приложением Blazor с использованием Microsoft Identity. Однако у меня проблема с функцией входа пользователя. Я могу без проблем создать и подтвердить пользователя, состояние в базе данных тоже правильное. Но когда я вызываю метод:

Код: Выделить всё

 var result = await SignInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: false);
он ​​каждый раз возвращает «Failed», несмотря на то, что учетные данные пользователя верны.
Я даже выполнил простое руководство проверьте, чтобы подтвердить пользователя:

Код: Выделить всё

if (user is not null)
{
userMatch = "YES!";

var passwordCheck = await UserManager.CheckPasswordAsync(user, Input.Password);
if (!passwordCheck)
{
passwordMatch = "NO";
}
else
{
if (!await UserManager.IsEmailConfirmedAsync(user))
{
loginError = "Email not confirmed.";
}

if (await UserManager.IsLockedOutAsync(user))
{
loginError = "Account is locked out.";
}

if (await UserManager.GetTwoFactorEnabledAsync(user))
{
loginError = "Two-factor authentication is required.";
}

}
}
Все вызовы указывают на то, что пользователь существует, пароль верен и других ошибок нет.
Я использую идентификационный код Microsoft по умолчанию для компонента входа в систему (просто добавлен код выше). Моя конфигурация удостоверения выглядит следующим образом:

Код: Выделить всё

public static IServiceCollection AddIdentityServices(this IServiceCollection services,
IConfiguration configuration)
{
services.AddCascadingAuthenticationState();
services.AddScoped();
services.AddScoped();
services.AddScoped();

services.AddAuthentication(options =>
{
options.DefaultScheme = IdentityConstants.ApplicationScheme;
options.DefaultSignInScheme = IdentityConstants.ExternalScheme;
})
.AddIdentityCookies();

var connectionString = configuration.GetConnectionString("DefaultConnection") ??
throw new InvalidOperationException("Connection string 'DefaultConnection' not found.");
services.AddDbContext(options =>
options.UseNpgsql(connectionString));
services.AddDatabaseDeveloperPageExceptionFilter();

services.AddIdentityCore(options =>
{
options.SignIn.RequireConfirmedAccount = true;
options.SignIn.RequireConfirmedEmail = true;
options.User.RequireUniqueEmail = true;
})
.AddEntityFrameworkStores()
.AddSignInManager()
.AddDefaultTokenProviders();

services.AddSingleton();
services.AddScoped();
services.AddScoped();

services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo("/app/appData"))
.SetApplicationName(nameof(""));

return services;
}
Единственная информация, которую я вижу в журналах:

Код: Выделить всё

Authorization failed. These requirements were not met:
DenyAnonymousAuthorizationRequirement: Requires an authenticated user.
Кроме того, я использую Docker для запуска этого приложения. Что еще может быть важно — при использовании метода SignInAsync вместо PasswordSignInAsync — он работает.

Подробнее здесь: https://stackoverflow.com/questions/793 ... with-login
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»