用户每10到20分钟就会注销一次(声明身份验证)

时间:2017-01-10 11:08:13

标签: authorization single-sign-on claims-based-identity

出于某种原因,用户几乎每隔10/20分钟就会被重定向回login.microsoftonline.com。这非常烦人,因为下面的代码用于登录CMS的用户。

有人能告诉我以下代码有什么问题吗?为什么我们的用户会被注销/重定向回login.microsoftonline.com?会话生存期设置为60分钟,因此必须具有授权本身。

我们应该使用WsFederationAuthenticationDefaults.AuthenticationType,CookieAuthenticationDefaults.AuthenticationType还是DefaultAuthenticationTypes.ApplicationCookie?

我们希望允许用户使用表单(/ account / inloggen)或使用名为“Azure SSO”(这是外部登录)的按钮登录

public void ConfigureAuth(IAppBuilder app)
{
  // Configure the db context and user manager to use a single instance per request
  app.CreatePerOwinContext(ApplicationDbContext.Create);
  app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);

  // Enable the application to use a cookie to store information for the signed in user
  // and to use a cookie to temporarily store information about a user logging in with a third party login provider
  // Configure the sign in cookie

  app.UseCookieAuthentication(new CookieAuthenticationOptions
  {
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
    LoginPath = new PathString("/account/inloggen"),
    Provider = new CookieAuthenticationProvider
    {
      OnResponseSignIn = ctx =>
      {
        ctx.Identity = TransformClaims(ctx.Identity);
        ctx.Properties.ExpiresUtc = DateTimeOffset.UtcNow.AddDays(7.0);
      },
      OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
                              validateInterval: TimeSpan.FromMinutes(30),
                              regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
    },
    ExpireTimeSpan = TimeSpan.FromDays(7.0),
    SlidingExpiration = true
  });

  app.UseCookieAuthentication(new CookieAuthenticationOptions
  {
    Provider = new CookieAuthenticationProvider
    {
      OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
          validateInterval: TimeSpan.FromMinutes(30),
          regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
    },
    ExpireTimeSpan = TimeSpan.FromDays(7.0),
    SlidingExpiration = true
  });

  app.UseWsFederationAuthentication(new WsFederationAuthenticationOptions
  {
    MetadataAddress = "https://login.microsoftonline.com/xxxxxxxxxxxxxx/federationmetadata.xml",
    Wtrealm = "https://portal.domain.com",
    Caption = "Azure SSO",
    SignInAsAuthenticationType = CookieAuthenticationDefaults.AuthenticationType,
    UseTokenLifetime = false,
    AuthenticationMode = AuthenticationMode.Passive
  });

  app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
}

我们何时以及为何要使用此产品?

app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

你可能已经注意到我对这一切都很新。我浏览过堆栈溢出和Googled大量示例,但没有明确的答案/教程解释了不同的授权类型,它们的属性以及如何使用它们。

1 个答案:

答案 0 :(得分:0)

您的validateInterval:TimeSpan.FromMinutes(30)设置为30分钟。

validateInterval与给定时间名称上的过期cookie不同。 例如,用户登录位置A,然后转到位置B并登录并更改密码。然后他们在30分钟后回到位置A.他们将退出。

只要创建/更改密码或添加/删除外部登录,就会创建SecurityStampValidator。

来源documentation

希望它有所帮助。