У меня есть приложение ASP Core MVC, которое использует AD аутентификацию, которая работает хорошо.Я хочу добавить дополнительный шаг к входу в систему, после того как пользователь аутентифицирован в AD, я хочу проверить, авторизован ли пользователь в базе данных, поскольку мое приложение может использоваться только авторизованными и авторизованными пользователями.
Это хочу, чтобы у меня был сейчас файл Startup.cs:
// Authentication:
services.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddAzureAd(options =>
{
Configuration.Bind("AzureAd", options);
AzureAdOptions.Settings = options;
})
.AddCookie(options =>
{
options.EventsType = typeof(CustomCookieAuthenticationEvents);
});
Я реализовал пользовательский класс для переопределения входа:
public override async Task SigningIn(CookieSigningInContext context)
{
var email = context.Principal.Claims.FirstOrDefault(c => c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress")?.Value;
// Verifies if the user is configured on the database, if it's not access must be denied.
try
{
var user = _managementDbContext.Users.Single(u => u.Email == email);
// Add tenant and role information to the claims list
context.Principal.Claims.Append(new Claim("organization", user.Tenant.Name));
context.Principal.Claims.Append(new Claim("role", user.Role.Name));
await base.SigningIn(context);
}
catch (InvalidOperationException)
{
//TODO redirect to another page
}
}
Когда я запускаю код (которыйбаза данных настроена на возврат ошибки и неудачную аутентификацию) поток попадает в исключение, но cookie-файл аутентификации создается в любом случае.
Я ожидал, что смогу предотвратить это.Мне интересно, переопределяю ли я правильное событие.
Заранее спасибо.
PS: я использую .NET Core 2.2