使用数据库中的许可证配置验证MVC应用程序的使用

时间:2014-03-28 16:29:06

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

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

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

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

我当前修改了在加载错误页面时发出AJAX调用以在服务器端触发Session.Abandon的想法,但这仍然是错误的,如果有人意识到它是如何工作的话,可能会被滥用。

整个应用程序使用Windows身份验证进行保护,因此我无法在登录尝试期间评估许可,这将是我对表单身份验证的处理方式。

有关替代方法的任何建议吗?

1 个答案:

答案 0 :(得分:0)

由于这是一个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分钟内处于非活动状态,如果是,则将其注销。