在 MVC5 Web 应用程序上,我使用的是 Asp.net Identity。当用户注册时,我添加了一些声明,它们保存在数据库中,并在用户登录时恢复。这非常有效。现在,基于一个参数(登录页面上的复选框),我想在用户登录时向用户添加特定的声明。但是有一个问题:此声明将仅存在于该用户特定的会话中(如果同一用户登录另一个浏览器实例或设备并且不选中该复选框,他将不会拥有该声明)。我没有使用并且不希望依赖 asp.net 会话。
我很容易实现这一点,只需在调用时添加声明AuthenticationManager.SignIn
:
private async Task SignInAsync(CustomUser user, bool isPersistent, bool myCustomTemporaryClaim)
{
var identities = await user.GenerateUserIdentityAsync(UserManager);
if (myCustomTemporaryClaim)
{
identities.AddClaim(new Claim(CustomClaimTypes.MyCustomTemporaryClaim, "true"));
}
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identities);
}
这工作正常。但是 VS 模板上的默认 asp.net 身份实现被配置为每 30 分钟“刷新”一次身份。发生这种情况时,我放弃了我的自定义声明。所以,我想知道的是,在 asp.net 身份重新生成 cookie 之前,是否可以“拦截”并获取我的自定义声明值?
我可以删除,regenerateIdentityCallback
但我不知道这可能是什么结果。