我目前正在尝试保护我们的应用程序,以便在许可证到期时无法使用。在我们的数据库中存储了一个注册键,我用它来确定许可证的有效性。
我最初的想法是在全局使用Session_Start。Asax文件以引用许可证详细信息,并在必要时发出重定向到"更新您的许可证页面"。在重定向之后,我在控制器操作中调用Session.Abandon(),以便对页面的任何进一步请求都将重复相同的过程。
这种方法的问题是,如果用户刷新页面,我似乎得到一个重定向循环发生。这让我认为Session_Start不是最好的主意,但我试图避免在BeginRequest或类似的地方放置代码。在更新许可证的有效尝试期间,绕过它也会很混乱。
我目前修改了在加载错误页面时进行AJAX调用以触发Session的想法。在服务器端放弃,但这仍然是错误的,如果有人意识到它是如何工作的,这是开放的滥用。
整个应用程序使用Windows身份验证进行保护,所以我没有选择在登录尝试期间评估许可,这将是我使用表单身份验证所做的。
有其他方法的建议吗?
因为这是一个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分钟,如果是,就注销。