【发布时间】:2018-01-16 22:03:04
【问题描述】:
我正在使用 OWIN 开发 ASP.Net 应用程序,目前我遇到了索赔问题。我有两个级别的应用程序:基本和高级。某些功能仅适用于高级用户。所以我检查了声明,如果用户没有声明 advanced 我返回 403。但是在这里我找到了破坏这个系统的解决方法:
- 用户激活高级模式
- 他执行任何操作并保存其访问令牌
- 他禁用高级模式
- 现在他可以使用此令牌执行操作,就像他处于高级模式一样,但他实际上没有权限这样做。
我正在尝试为这种情况找到一些好的解决方案,但除了 set 1 minute timeout 或 always check AspNetUserClaims instead of cookie 等我没有其他想法,但它们在我的情况下不起作用,因为他可以在此激活终身功能间隔一分钟,然后永久使用。
但我想设置一些服务器端标志,例如 oops, this guy have just changed his cookies, check it from database 或其他东西,以降低常见 API 调用的数据库往返次数。
是否有任何标准的默认方式来做到这一点?或者我只是选择了错误的乐器?
【问题讨论】:
-
在 Identity 中,您可以简单地注销用户并以编程方式重新登录。似乎那样会反弹他们的 cookie 和 IPrincipal
-
@Eonasdan 我不知道何时注销用户。对于每个请求?每5分钟一次?如果是前者,那就没用了。如果后者比用户有 5 分钟的时间做每件事。
-
“用户激活高级模式”-> 退回登录-> “他停用高级模式”-> 退回登录
-
退回登录不会影响已经存在的 cookie。如果用户有
val1,val2,val3的值并将其发送到服务器,Claims表示他实际上拥有它们。我无法在服务器端注销这些值。这只是一个请求。 -
简化:服务器收到一些请求,比如说“主页上的pring消息”和cookie“HOME_PAGE_MANAGER”。这种情况下服务器应该做什么?
标签: c# asp.net asp.net-mvc cookies owin