gpt4 book ai didi

authorization - 如何将管理员的更改传播到用户的声明

转载 作者:行者123 更新时间:2023-12-04 15:34:31 28 4
gpt4 key购买 nike

情况

假设站点管理员从管理员角色中删除用户并将她添加到贡献者角色。根据该站点的数据库,该用户已被降级,不应再有权访问仅限管理员使用的功能。现在,用户在更改后的某个时间返回站点,但在更改前的某个时间登录并且仍然处于登录状态。只要该用户不退出,她将继续声称她在管理员角色。如果她注销或被注销,她将失去属于 Admin 角色的声明,而当她重新登录时会收到属于 Contributor 角色的新声明。

欲望

我希望发生的事情,也许下次用户在管理员进行更改后从站点请求页面时,让该用户透明地失去管理员角色声明并获得贡献者角色声明,而无需他们注销或执行任何特别的东西。事实上,我希望他们不知道这一变化,只是她的菜单发生了一些变化,因为她不能再执行仅限管理员的事件。

您将如何以受影响用户不可见的方式处理这种情况?

我的想法

我正在使用 ASP.NET MVC 5 和 ASP.NET Identity,但似乎对此的解决方案可以很容易地推广到其他使用 cookie 的基于声明的框架。我相信 ASP.NET Identity 在 MVC 5 应用程序中默认将声明存储在用户的 cookie 中。

我已经阅读了以下帖子以及 SO 上的许多其他帖子,它最接近回答这个问题,但它仅解决用户更新自己的情况,而不是管理员等其他人对她的帐户进行更改时:MVC 5 current claims autorization and updating claims

最佳答案

Identity 2.0 中有一个功能可以解决这个问题,基本上你可以做这样的事情,在 cookie 层添加验证,这将拒绝凭据已更改的用户,因此他们被迫重新登录/获取新的 cookie。删除角色应该会触发此验证(请注意,它仅在通过 validationInterval 后才执行此验证检查,因此 cookie 在较小的时间跨度内仍然有效。

app.UseCookieAuthentication(new CookieAuthenticationOptions {
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
Provider = new CookieAuthenticationProvider {
// Enables the application to validate the security stamp when the user logs in.
// This is a security feature which is used when you change a password or add an external login to your account.
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
}
});

关于authorization - 如何将管理员的更改传播到用户的声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21607431/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com