Общий файл аутентификации - PullRequest
0 голосов
/ 05 ноября 2019

Сегодня, согласно правилам моей компании, я делю свои cookie-аутентификации между моими приложениями intranet asp.net mvc 5 в разных портах с помощью этой конфигурации класса запуска Owin:

using System;
using System.Configuration;
using Microsoft.AspNet.Identity;
using Microsoft.Owin;
using Microsoft.Owin.Security.Cookies;
using Owin;

[assembly: OwinStartup(typeof(Icomon.ControleProducao.Site.Startup))]
namespace Site
{
    public partial class Startup
    {
        public void ConfigureAuth(IAppBuilder app)
        {
            app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                ExpireTimeSpan = TimeSpan.FromMinutes(30),
                LoginPath = new PathString("/Account/Login"),
                LogoutPath = new PathString("/Account/Logout"),
                SlidingExpiration = true,
                Provider = new CookieAuthenticationProvider
                {
                    OnApplyRedirect = ApplyRedirect
                }
            });

            app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
        }

        private static void ApplyRedirect(CookieApplyRedirectContext context)
        {
            if (Uri.TryCreate(context.RedirectUri, UriKind.Absolute, out Uri absoluteUri))
            {
                var path = PathString.FromUriComponent(absoluteUri);
                if (path == context.OwinContext.Request.PathBase + context.Options.LoginPath)
                    context.RedirectUri = "domain.com/login";
            }

            context.Response.Redirect(context.RedirectUri);
        }
    }
}

Теперь я пытаюсьдобавить основные приложения asp.net в этой области, но безуспешно. Это мой код:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews(options => options.Filters.Add(new AuthorizeFilter()));

    services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
      .AddCookie(options =>
      {
          options.ExpireTimeSpan = TimeSpan.FromMinutes(30);
          options.SlidingExpiration = true;
          options.Events.OnRedirectToLogin = (context) =>
          {
              if (Uri.TryCreate(context.RedirectUri, UriKind.Absolute, out var absoluteUri))
              {
                  var path = PathString.FromUriComponent(absoluteUri);
                  if (path == context.Request.PathBase + context.Options.LoginPath)
                  {
                      context.Response.Redirect("domain.com/login");
                  }
              }

              return Task.CompletedTask;
          };
      });
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }

    app.UseStaticFiles();

    app.UseCookiePolicy();
    app.UseAuthentication();
    app.UseAuthorization();

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

Я использую это для любого пользователя, просто войдите один раз и можете получить доступ ко всем приложениям, перечисленным в соответствии с разрешениями.

У кого-нибудь есть решение? Большое спасибо

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