似乎我没有好好表达我的问题,所以我将其添加为补充标题:如何扩展FormsAuthentication类以便我可以覆盖配置文件中的默认行为(例如,将执行控制权交给在新页面请求中更新MembershipUser的LastActivity的MembershipProvider,如果不这样做,将FormsAuthentication类的机制替换为我自己的自定义类并使用它,因为通常会使用FormsAuthentication类?
我们如何实现一个不那么荒谬,更具可扩展性的FormsAuthentication框架,以便我们集成到自定义MembershipProvider中?这有什么工作吗?最后,我想在我的web.config中添加如下内容:
<authentication mode="Forms">
<forms membershipProvider="MyCustomMembershipProvider">
<events>
<add event="AuthenticatedRequest" action="OnAuthRequest" />
<add event="UnAuthenticatedRequest" action="OnRequest" />
<add event="UnAuthorizedRequest" action="UnAuthRequest" />
</events>
</forms>
</authentication>
这不应该占用我所有的时间。表单身份验证在ASP.NET页面生命周期中似乎相当低级,但必须有一种方法可以彻底规避它。
这与自定义成员资格提供程序无关。我希望在我的成员资格提供程序类中实现隐含的“IsOnline”和“LastActivity”功能,但FormsAuthentication设置cookie并且不回顾。我想在检查cookie时注入自己的代码,但我不能。除了在顶层分层我自己的cookie之外,还有其他方法。
答案 0 :(得分:1)
根据您的更新,您可以创建自linked question继承的SqlMembershipProvider中提及的自定义成员资格提供程序,覆盖您要更改的任何功能。
你是正确的Forms Authentication只是创建一个cookie;这就是它的意图 - 帮助您的应用程序确定您的用户是否已登录。Membership部分告诉您IsOnline和LastActivity以及其他用户信息。
如果您可以告诉我们您希望覆盖哪些会员资格功能,我们可以尝试提供帮助,因为您尚未提供足够详细信息。
答案 1 :(得分:1)
不,它不起作用。成员资格提供程序不会获得经过身份验证的请求或未经身份验证的请求。实际上,它与身份验证几乎没有关系。这是由安全框架处理的。成员资格仅用于验证某人的用户名和密码。而已。您可以将Membership视为安全框架用于对用户进行身份验证的数据存储,但它不会对身份验证本身进行管理。
这篇文章可能正是您所寻找的:
http://www.asp.net/security/tutorials/forms-authentication-configuration-and-advanced-topics-cs