Identity Server 3 помните, что я не работал, когда мы даем путь / идентификации - PullRequest
0 голосов
/ 14 сентября 2018

Я много изучал и читал эту проблему и, наконец, обнаружил, что проблема связана с URL-адресом Identity Server. Мы дали "/Identity" пути (app.Map("/identity", idsrvApp =>), и программа «Помни меня» не работает. Если мы удалим это работает. Поскольку приложение находится в производстве и от него зависит много клиентов, изменить его и заставить его работать нелегко.

Есть ли другой способ, с помощью которого мы можем заставить его работать?

Вот настройки Identity Server

public void Configuration(IAppBuilder app)
    {
        app.UseCors(CorsOptions.AllowAll);
        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {

            AuthenticationType = "Cookies",
            ExpireTimeSpan = new TimeSpan(0, 30, 0),
            SlidingExpiration = true
        });

        app.Map("/identity", idsrvApp =>
        {
            var corsPolicyService = new DefaultCorsPolicyService()
            {
                AllowAll = true
            };
            var idServerServiceFactory = new IdentityServerServiceFactory();

            idServerServiceFactory.ConfigureUserService("Context");
            idServerServiceFactory.CorsPolicyService = new
                Registration<IdentityServer3.Core.Services.ICorsPolicyService>(corsPolicyService);
            // use custom ViewService
            idServerServiceFactory.ViewService = new Registration<IViewService, CustomViewService>();
            idServerServiceFactory.ScopeStore = new Registration<IScopeStore, ScopeStore>();
            idServerServiceFactory.ClientStore = new Registration<IClientStore, ClientStore>();
            var options = new IdentityServerOptions
            {
                Factory = idServerServiceFactory,
                SiteName = "Login",
                IssuerUri = ConfigurationManager.AppSettings["issuerUri"],
                PublicOrigin = ConfigurationManager.AppSettings["Origin"],
                SigningCertificate = LoadCertificate(),
                AuthenticationOptions = new IdentityServer3.Core.Configuration.AuthenticationOptions()
                {
                    CookieOptions = new CookieOptions()
                    {
                        AllowRememberMe = true,
                        SecureMode = CookieSecureMode.Always,
                        RememberMeDuration = TimeSpan.FromDays(30),
                        SlidingExpiration = true
                    },
                    EnablePostSignOutAutoRedirect = true,
                    LoginPageLinks = new List<LoginPageLink>(){
                        new LoginPageLink() {
                             Href = "forgotpassword",
                             Text = "Reset Your Password",
                             Type = "forgotpassword"
                        }
                   }
                }
            };
            idsrvApp.UseIdentityServer(options);
        });
    }
    X509Certificate2 LoadCertificate()
    {
        return new X509Certificate2(
            string.Format(@"{0}\certificates\idsrv3test.pfx",
            AppDomain.CurrentDomain.BaseDirectory), "idsrv3test");
    }

Вот некоторые сообщения, на которые Брок Аллен и LeastPrivilet ответили, но решение не было предоставлено. Эти проблемы имеют ту же проблему.

https://github.com/IdentityServer/IdentityServer3/issues/3693

и

https://github.com/IdentityServer/IdentityServer3/issues/2426

1 Ответ

0 голосов
/ 27 сентября 2018

Наконец-то я нашел ответ.Когда мы даем "/identity" для нашего маршрута Identity Server, файл cookie генерируется для пути "/identity", и по этой причине функция Remember Me не работает.

Чтобы исправить это, мы должны указать путь к cookie какPath = "/" для CookieOptions как показано ниже

  app.Map(
            "/identity",
            coreApp =>
                {
                    var factory =
                        new IdentityServerServiceFactory()
                            .UseInMemoryClients(Clients.Get())
                            .UseInMemoryScopes(Scopes.Get());
                    factory.ViewService = new Registration<IViewService, IdentityCustomViewService>();

                    factory.Register(new Registration<CustomIdentityDbContext>(resolver => HttpContext.Current.GetOwinContext().Get<CustomIdentityDbContext>()));

                    factory.Register(new Registration<CustomUserManager>(resolver => HttpContext.Current.GetOwinContext().GetUserManager<CustomUserManager>()));

                    factory.Register(new Registration<CustomAspNetIdentityUserService>(x => new CustomAspNetIdentityUserService(x.Resolve<CustomUserManager>())));

                    factory.Register(new Registration<UserManager<CustomIdentityUser, int>>(x => x.Resolve<CustomUserManager>()));

                    factory.UserService = new Registration<IUserService>(x => x.Resolve<CustomAspNetIdentityUserService>());

                    coreApp.UseIdentityServer(
                        new IdentityServerOptions
                        {
                            SiteName = "Identity Server",
                            SigningCertificate = Cert.Load(),
                            Factory = factory,
                            RequireSsl = true,
                            AuthenticationOptions = new IdentityServer3.Core.Configuration.AuthenticationOptions
                            {
                                IdentityProviders= ConfigureIdentityProviders,
                                EnablePostSignOutAutoRedirect = true,
                                CookieOptions = new IdentityServer3.Core.Configuration.CookieOptions()
                                {
                                    AllowRememberMe = true,
                                    SecureMode = CookieSecureMode.Always,
                                    RememberMeDuration = TimeSpan.FromDays(30),
                                    IsPersistent = false,
                                    Path = "/"
                                },
                            }
                        });

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