如何关闭 ASP.NET Core Identity 中的 SecurityStamp 功能
How Does One Turn Off the SecurityStamp Feature in ASP.NET Core Identity
我从使用 Identity Server 中学到的一件事是,开箱即用,ASP.NET Core Identity 不能很好地与 身份服务器。参考this question.
ASP.NET Identity 包含一种在特定用户数据已更改的情况下弹出用户的方法。这是由 aspnetuser table 的 SecurityStamp 列调节的。当 stamp 改变时,下次验证 cookie 时,它验证失败。
这是默认打开的,这就是它不能很好地与 Identity Server.
一起工作的原因
您最终会导致用户被不规律地踢出。当您期望它将用户踢出时,它并没有。
无论如何,如何禁用ASP.NET身份的这个功能???
UserManager 上有一列名为 SupportsUserSecurityStamp。
但是,它只是一个“getter”,我找不到将其切换为 return false
.
的任何配置设置
在我看来,唯一的方法是从 UserManager class 派生并使 属性 永远 return false
.
这感觉像是黑客攻击。特别是当你在 Github:
上查看 属性 的代码时
public virtual bool SupportsUserSecurityStamp
{
get
{
ThrowIfDisposed();
return Store is IUserSecurityStampStore<TUser>;
}
}
是否有关闭 ASP.NET Identity 的 SecurityStamp 功能的“正确方法”?
旁注:目前,我们有一个创可贴解决方案,可以通过此配置使大量验证时间变长-
services.Configure<SecurityStampValidatorOptions>(
o => o.ValidationInterval = TimeSpan.FromHours(SecurityTimestampDuration)
);
所有这一切都是为了在邮票验证之间创造一个巨大的 window。但完全关闭该功能更可取。
干杯
我关闭了 SecurityStamp
功能,如问题中所述。
因此,我创建了一个继承自 UserManager
class 的 class。
应该看起来像这样:
public class IcUserManager : UserManager<IdpUser>
{
public IcUserManager(IUserStore<IdpUser> store,
IOptions<IdentityOptions> optionsAccessor,
IPasswordHasher<IdpUser> passwordHasher,
IEnumerable<IUserValidator<IdpUser>> userValidators,
IEnumerable<IPasswordValidator<IdpUser>> passwordValidators,
ILookupNormalizer keyNormalizer, IdentityErrorDescriber errors,
IServiceProvider services,
ILogger<UserManager<IdpUser>> logger)
: base(store, optionsAccessor, passwordHasher, userValidators, passwordValidators, keyNormalizer, errors, services, logger)
{
}
public override bool SupportsUserSecurityStamp => false;
}
通过将 SupportsUserSecurityStamp
设置为 false,它会立即退出框架中的验证检查。
我从使用 Identity Server 中学到的一件事是,开箱即用,ASP.NET Core Identity 不能很好地与 身份服务器。参考this question.
ASP.NET Identity 包含一种在特定用户数据已更改的情况下弹出用户的方法。这是由 aspnetuser table 的 SecurityStamp 列调节的。当 stamp 改变时,下次验证 cookie 时,它验证失败。
这是默认打开的,这就是它不能很好地与 Identity Server.
一起工作的原因
您最终会导致用户被不规律地踢出。当您期望它将用户踢出时,它并没有。
无论如何,如何禁用ASP.NET身份的这个功能???
UserManager 上有一列名为 SupportsUserSecurityStamp。
但是,它只是一个“getter”,我找不到将其切换为 return false
.
在我看来,唯一的方法是从 UserManager class 派生并使 属性 永远 return false
.
这感觉像是黑客攻击。特别是当你在 Github:
上查看 属性 的代码时public virtual bool SupportsUserSecurityStamp
{
get
{
ThrowIfDisposed();
return Store is IUserSecurityStampStore<TUser>;
}
}
是否有关闭 ASP.NET Identity 的 SecurityStamp 功能的“正确方法”?
旁注:目前,我们有一个创可贴解决方案,可以通过此配置使大量验证时间变长-
services.Configure<SecurityStampValidatorOptions>(
o => o.ValidationInterval = TimeSpan.FromHours(SecurityTimestampDuration)
);
所有这一切都是为了在邮票验证之间创造一个巨大的 window。但完全关闭该功能更可取。
干杯
我关闭了 SecurityStamp
功能,如问题中所述。
因此,我创建了一个继承自 UserManager
class 的 class。
应该看起来像这样:
public class IcUserManager : UserManager<IdpUser>
{
public IcUserManager(IUserStore<IdpUser> store,
IOptions<IdentityOptions> optionsAccessor,
IPasswordHasher<IdpUser> passwordHasher,
IEnumerable<IUserValidator<IdpUser>> userValidators,
IEnumerable<IPasswordValidator<IdpUser>> passwordValidators,
ILookupNormalizer keyNormalizer, IdentityErrorDescriber errors,
IServiceProvider services,
ILogger<UserManager<IdpUser>> logger)
: base(store, optionsAccessor, passwordHasher, userValidators, passwordValidators, keyNormalizer, errors, services, logger)
{
}
public override bool SupportsUserSecurityStamp => false;
}
通过将 SupportsUserSecurityStamp
设置为 false,它会立即退出框架中的验证检查。