【问题标题】:Validating use of MVC application with license config in database使用数据库中的许可证配置验证 MVC 应用程序的使用
【发布时间】:2014-05-08 05:41:27
【问题描述】:

我目前正在尝试保护我们的应用程序,使其在许可证过期时无法使用。我们的数据库中存储了一个注册密钥,我用它来确定许可证的有效性。

我最初的想法是在 global.asax 文件中使用 Session_Start 来参考许可证详细信息,并在必要时发出重定向到“更新您的许可证页面”。在重定向之后,我在控制器操作中调用了 Session.Abandon(),以便对页面的任何进一步请求都将重复相同的过程。

这种方法的问题是,如果用户刷新页面,我似乎会出现重定向循环。这让我认为 Session_Start 不是最好的主意,但我试图避免将代码放在 BeginRequest 或类似中。在有效尝试更新许可证期间绕过也会很麻烦。

我目前修改了在加载错误页面时进行 AJAX 调用以在服务器端触发 Session.Abandon 的想法,但这仍然感觉不对,并且如果有人意识到它是如何工作的,就会被滥用。

整个应用程序使用 Windows 身份验证进行保护,因此我无法在登录尝试期间评估许可,而这正是我使用表单身份验证所做的。

对替代方法有什么建议吗?

【问题讨论】:

  • 为什么不用Application_Start() 而不是Session_Start()?检查每个请求的许可证是没有意义的(除非许可证间隔 5 分钟) - 每天一次左右应该没问题。此外,如果有人想绕过许可证检查,AJAX 调用将很容易被禁用。
  • @Tommy 感谢您的回复。不幸的是,他们在同一个应用程序中更新了注册密钥。

标签: asp.net asp.net-mvc application-lifecycle


【解决方案1】:

由于这是一个 MVC 应用程序,您可以编写一个自定义属性,将其放置在所有控制器都继承自的基本控制器上。

 public class MyAuthorization : AuthorizeAttribute
 {
     //Call a stored proc or your database layer to check for the 
     //correct license validity
 }

 [MyAuthorization]
 public class BaseController : Controller 
 {
 }

 public class HomeController : BaseController
 {
 }

每次点击控制器时,它都会检查许可证密钥。

这就是我们处理授权超时的方式。我们检查我们的数据库,看看用户是否有 20 分钟不活动,如果是,则将其注销。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-09
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多