代码之家  ›  专栏  ›  技术社区  ›  LP13

身份服务器3未持久化身份验证cookie

  •  0
  • LP13  · 技术社区  · 4 年前

    我正在使用IdentityServer3。我有3个客户端应用程序。2个应用程序是在.NET核心中开发的,1个是在完整的.NET中开发的。

    在登录屏幕上,如果用户选中 remember me 选项,则用户在应用程序之间切换时不必重新登录。如果
    所以基本上,当用户检查 Remember Me 选项设置持久cookie。(我猜)

    记得我吗 选项i始终希望cookie保持不变,以便用户在应用程序之间切换时不必重新登录。因此,根据我设置的文档 IsPersistent AllowRemmberMe false

        public void Configuration(IAppBuilder app)
        {           
            DataProtectionProvider = app.GetDataProtectionProvider();
    
            app.Map("/identity", idsrvApp =>
            {
                var identityServerOptions = new IdentityServerOptions
                {
                    SiteName = "my Login",
                    SigningCertificate = LoadCertificateFromWindwosStore(ApplicationConfig.SigningCertificateSubjectName),
                    RequireSsl = true,
                    Factory = new IdentityServerServiceFactory()
                        .Configure(),
                    AuthenticationOptions = new AuthenticationOptions()
                    {
                        CookieOptions = new IdentityServer3.Core.Configuration.CookieOptions()
                        {
                            //forced user to log back in after the Client (ie MVC App) cookie expires
                            ExpireTimeSpan = System.TimeSpan.FromSeconds(5),
                            SlidingExpiration = false,
    
                            //Indicates whether the authentication cookie is marked as persistent. Defaults to false.
                            IsPersistent = true,
                            
                            AllowRememberMe = false                            
                        },
                        EnableAutoCallbackForFederatedSignout = true,
                        EnableSignOutPrompt = false
                    },
                    EventsOptions = new EventsOptions().Configure(),
                    EnableWelcomePage = ApplicationConfig.EnableWelcomePage
                };
    
                idsrvApp.UseIdentityServer(identityServerOptions);                
            });            
        }
    

    enter image description here

    但是,这不会创建持久cookie。这个 选项从登录屏幕消失,但用户在应用程序之间切换时始终必须登录。

    更新1
    正如我之前提到的 记得我吗 选中该复选框后,它将创建持久cookie,用户无需重新登录。所以在登录页面上,我将复选框编码为true并隐藏复选框。成功了。但我认为这是不对的。我想知道什么是正确的解决方案,为什么设置

    为了让它工作,我设置了 ng-show 假的 ng-checked true

    <!--<div class="col-md-6" ng-show="model.allowRememberMe">-->
    
         <div class="col-md-6" ng-show="false">
              <input type="checkbox" id="rememberMe" name="rememberMe" 
                     ng-model="model.rememberMe" value="true" ng-checked="true">
              <span>Remember Me</span>
         </div>
    
    0 回复  |  直到 4 年前
        1
  •  0
  •   Warren Parad    4 年前

    这与Cookie的工作方式有关,虽然我不确定IdentityServer3中是否存在配置Cookie的功能,但如果一个身份验证服务器只使用Cookie,就不能让它向两个不同的域发出身份验证。您需要一个更深入的身份验证提供者来为您处理类似的事情。

        2
  •  0
  •   Nadeem Taj    4 年前

    不再受Microsoft支持。由于底层平台本身不支持新的cookie语义,因此没有简单的修复方法。

    这实际上是一个平台问题,而不是一个IdentityServer问题。确保您使用的是最新支持的.NET Core,并遵循Microsofts的说明。