Net Core Identity 2.1 Аутентификация не работает правильно, доступ к защищенным конечным точкам - PullRequest
0 голосов
/ 12 октября 2018

Проблема, которая будет описана, заключается в том, что приложение предназначено для аутентификации другого приложения, и страница входа не проходит аутентификацию, после чего вводятся правильные учетные данные.

Конечные точки в нескольких приложениях защищены [Авторизация], чтобы гарантировать выполнение вызова и отображение страницы входа в систему.В целях тестирования используются новые приложения Net Core с функциональностью по умолчанию.Одно приложение запускается на локальном хосте, а другое приложение запускается и входит в систему, чтобы перенаправить на первое сразу после успешной аутентификации, отображая страницу входа в систему для этого приложения.Это нормально.

Если учетные данные для входа введены неверно, то «Неверная попытка входа», как и следовало ожидать.Однако, когда применяются правильные учетные данные, проверка подлинности вообще не происходит, и страница входа в систему по-прежнему отображается без перенаправления, а введенные учетные данные исчезают.Это не кажется правильным.Также пытались добавить, используя проверку подлинности Cookie, но не могут отобразить cookie, и JWT, но не знаю, куда отправлять токены.Как мне заставить это работать?В идеале я хотел бы, чтобы прошла первая аутентификация, чтобы страница входа в систему не отображалась в перенаправлении, но это может быть намного сложнее.Код Startup.cs во всех приложениях показан ниже, чтобы проверить, отсутствует ли что-то очевидное.

    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)
    {
        // Authentication/Authorisation (Identity) Context
        services.AddDbContext<ApplicationDbContext>(options =>
        {
            options.UseSqlServer(Configuration["WCX_Identity_Connection"],
                                sqlOptions => sqlOptions.MigrationsAssembly(typeof(Startup).GetTypeInfo().
                                Assembly.GetName().Name));
        },
            ServiceLifetime.Scoped
        );

        // Configure default Identity implementation
        services.AddDefaultIdentity<ApplicationUser>()
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultUI()
            .AddDefaultTokenProviders()
            .AddEntityFrameworkStores<ApplicationDbContext>();

        // Register no-op EmailSender used by account confirmation and password reset during development
        // For more information on how to enable account confirmation and password reset please visit https://go.microsoft.com/fwlink/?LinkID=532713
        services.AddSingleton<Microsoft.AspNetCore.Identity.UI.Services.IEmailSender, EmailSender>();

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseCookiePolicy();

        app.UseAuthentication();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }

Для первого приложения ниже показан код Home Controller, и он отлично работает с использованием таблиц Identity, настроенных дляприложения.Другие приложения также указывают на ту же базу данных.

 public class HomeController : Controller
{
    [Authorize]
    public IActionResult Index()
    {
        // The home page is redirected dependent on currently logged in user details stored in the Identity tables.
        if (User.Identity.IsAuthenticated)
        {
            using (var context = new WCX_IdentityContext())
            {
                // Use Identity and EF core to retrieve logged on user details
                var identity = (ClaimsIdentity)User.Identity;

                // The AspNetUsers Identity table contains the basic identity details
                var user = context.AspNetUsers.SingleOrDefault(x => x.UserName == identity.Name);

                // The AspNetApplicationUsers table contains the application ids the logged on user is authorised to use
                var appUserIds = context.AspNetApplicationUsers.Where(x => x.UserId == user.Id).Select(y => y.ApplicationId);

                List<ApplicationLink> applicationLinks = new List<ApplicationLink>();
                foreach (var appUserId in appUserIds)
                {
                    // The AspNetApplications table contains the application name and redirect url 
                    var app = context.AspNetApplications.SingleOrDefault(x => x.Id == appUserId);
                    if (app != null)
                    {
                        applicationLinks.Add(new ApplicationLink
                        {
                            ApplicationName = app.ApplicationName,
                            AppUrl = app.AppUrl
                        });
                    }
                }

                if (applicationLinks.Count == 0)
                {
                    // Redirect to display no applications available
                    return RedirectToAction("Unavailable");
                }
                else if (applicationLinks.Count == 1)
                {
                    // Redirect to application url
                    return Redirect(applicationLinks[0].AppUrl);
                }
                else
                {
                    // Show hyperlinks on home page
                    return View(applicationLinks);
                }
            }
        }

        return View();
    }

Protected Application

Microsoft Identity Login Page

Hyperlinks To Protected Applications

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...