我们将角色存储在经过身份验证的用户的身份声明中。因此,如果后端数据库记录与角色相关的更改,我们希望cookie声明使用该信息进行更新,而不会强制用户再次注销。我能想到的唯一方法是使用ActionFilter重新生成这些角色:
public class PageAccessFilter : IActionFilter
{
public void OnActionExecuting(ActionExecutingContext context)
{
IAuthenticationService authenticationService = (IAuthenticationService) context.HttpContext.RequestServices.GetService(typeof(IAuthenticationService));
if (authenticationService != null)
{
if (context.HttpContext.User != null)
{
var user = authenticationService.GetCurrentUser();
authenticationService.RefreshUser(user); //claims, identity regeneration, and signout/signin occur here
}
}
}
public void OnActionExecuted(ActionExecutedContext context)
{
}
}
然而,这对我来说似乎很昂贵。这意味着每次请求都会重写cookie,这不是资源密集型的吗?有一个更好的方法吗?