Пользователь всегда не проходит аутентификацию после успешного входа в систему при использовании Identity вместе с SSO.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Пользователь всегда не проходит аутентификацию после успешного входа в систему при использовании Identity вместе с SSO.

Сообщение Anonymous »

У меня есть требование разрешить пользователям проходить аутентификацию либо с помощью единого входа, либо с помощью входа в систему с использованием удостоверения.
Я могу заставить оба варианта работать самостоятельно, но при попытке разрешить оба варианта я получаю следующее: p>
SSO работает должным образом, и пользователь аутентифицируется.
После успешного входа в систему с идентификацией пользователь перенаправляется, и статус аутентификации проверяется в контроллере, но это всегда ложь.
Я думаю, что program.cs может быть неправильным, вот он вместе с методом контроллера:
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Identity.UI.Services;
using Serilog.Sinks.MSSqlServer;
using Serilog;
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc.Authorization;
using System.IdentityModel.Tokens.Jwt;
using Microsoft.Identity.Web;
using Microsoft.Identity.Web.UI;
using Microsoft.IdentityModel.Protocols.OpenIdConnect;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authentication;
using System.Security.Claims;

var builder = WebApplication.CreateBuilder(args);

// Configure database connection
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection")
?? throw new InvalidOperationException("Connection string 'DefaultConnection' not found.");

builder.Services.AddDbContext(options =>
options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();

// Configure Identity services
builder.Services.AddDefaultIdentity(options =>
{
options.SignIn.RequireConfirmedAccount = false; // Adjust according to your needs
})
.AddRoles()
.AddEntityFrameworkStores();

// Configure OpenID Connect Authentication
builder.Services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; // Use cookies by default
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme; // Challenge with OpenID Connect
})
.AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"))
.EnableTokenAcquisitionToCallDownstreamApi()
.AddInMemoryTokenCaches();

builder.Services.Configure(CookieAuthenticationDefaults.AuthenticationScheme, options =>
{
options.Cookie.SameSite = SameSiteMode.Lax;
options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
options.Cookie.HttpOnly = false;
});

// Configure logging
Log.Logger = new LoggerConfiguration()
.WriteTo.MSSqlServer(
connectionString: builder.Configuration.GetConnectionString("DefaultConnection"),
sinkOptions: new MSSqlServerSinkOptions
{
TableName = "Logs",
AutoCreateSqlTable = true
},
restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Information,
columnOptions: new ColumnOptions())
.CreateLogger();
builder.Host.UseSerilog();

// Add services and Razor Pages
builder.Services.AddControllersWithViews(options =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
});
builder.Services.AddRazorPages()
.AddMicrosoftIdentityUI();
builder.Services.AddHttpContextAccessor();

// Configure CORS policy
builder.Services.AddCors(options =>
{
options.AddPolicy("AllowAll", builder =>
builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
});

// Register other application services
builder.Services.AddTransient();
builder.Services.AddTransient();
builder.Services.Configure(builder.Configuration.GetSection("SmtpSettings"));
builder.Services.AddTransient();
builder.Services.AddTransient();
builder.Services.AddTransient();
builder.Services.AddTransient();
builder.Services.AddTransient();
builder.Services.AddTransient();
builder.Services.AddTransient();

var app = builder.Build();

// Configure the HTTP request pipeline
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}

// Set IronPdf license key
var provider = app.Services;
var configuration = provider.GetRequiredService();
IronPdf.License.LicenseKey = configuration.GetSection("Keys").GetValue("IronPdf.LicenseKey");

if (app.Environment.IsDevelopment())
{
app.UseMigrationsEndPoint();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}

app.UseHttpsRedirection();
app.UseFileServer();
app.UseRouting();
app.UseCors("AllowAll");
app.UseAuthentication();
app.UseAuthorization();

app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();

app.UseStatusCodePagesWithRedirects("/Error/{0}");

app.Run();

Метод входа пользователя:
[HttpPost]
[AllowAnonymous]
[Route("LoginUser")]
public async Task LoginUser(LoginModel model, string returnUrl = null)
{
try
{
Log.Information("Login attempted: " + model.Email);
ViewData["ReturnUrl"] = returnUrl;

var result = await signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
if (result.Succeeded)
{
Log.Information("Successful Identity login: " + User.Identity.Name);

return Ok(new { message = "Success", redirectUrl = Url.Action("Home", "Accounts") });
}
else
{
Log.Error("Invalid login: " + model.Email);
ModelState.AddModelError(string.Empty, "Invalid login attempt.");
return BadRequest(new { message = "Unsuccessful" });
}
}
catch (Exception ex)
{
Log.Error("Error on login: " + model.Email + " " + ex.Message);
ModelState.AddModelError(string.Empty, "Error login attempt.");
return BadRequest(new { message = ex.Message });
}
}

Это успешно, когда я ставлю точку останова if (result.Succeeded)
И метод контроллера, на который мы перенаправляемся не проходит аутентификацию:
[Route("/accounts/home")]
public IActionResult Home()
{

if (User.Identity.IsAuthenticated)
{
return View();
}
return RedirectToAction("Login", "Home");
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... dentity-al
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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