我正在asp.net网站上实现简单身份验证。使用基本表单身份验证几乎是完美的:我将auth模式设置为Forms并在web.config中有一个简短的凭据部分,并使用一个简单的使用FormsAuthentication.Authenticate()和FormsAuthentication.RedirectFromLoginPage()的Login aspx页面。 p>
但是,我想为某些客户端IP地址添加额外的检查。如果请求来自某个IP地址,我想自动授权该请求,而不是将该请求重定向到“登录”页面。是否有一种简单的方法来扩展或覆盖内置表单AuthenticateRequest?我的另一个选择是创建我自己的HttpModule来执行此操作,但似乎我失去了FormsAuthentication方法的良好功能以及它们与凭证部分的交互。有什么建议吗?
答案 0 :(得分:4)
首先,你确定你想要这样做吗?如果有人猜到你没有验证的IP地址范围,IP欺骗将是攻击你的网站的理想方式!即使他们只知道地址的范围,这也会使蛮力攻击变得微不足道。
其次,您只需检查登录页面中的IP地址并从那里重定向......不需要HttpModule。但是,如果我是你,我也不会这样做。
更新: R G - 有几件事。我的想法是你在重定向之前会做一个Authenticate()调用。这样可以避免重定向循环。但看起来你甚至不需要那个因为......
其次,根据您在下面的评论(在Ben的帖子中),您将在Web服务中使用此代码。如果是这种情况,您是否不能将Web服务作为允许的访问页面放在Web.Config页面中?只需添加:
<location path="YourWebService.asmx">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
这就是我们所做的,虽然我们确实要求我们的Web服务的用户在我们处理Web服务请求之前发送“魔术短语”(它也是SSL加密的)。
答案 1 :(得分:0)
我同意马克。
如果您想在首次验证其凭据(正确)后让客户端非常轻松地连接到您的站点,您可以通过修改web.config来为他们提供基本上永久的持久性cookie:
<system.web>
...
<authentication mode="Forms">
<forms timeout="50000000" />
</authentication>
...
</system.web>
同时调用RedirectFromLoginPage()并将 createPersistentCookie 设置为 true 。
已编辑警告:如果您这样做(或确实提供任何持续时间的持久性Cookie),还可以让用户选择使用某种复选框拒绝持久性Cookie。 (如果反向工作,则最好:他们必须检查它以获得持久性cookie,标题为“单击此按钮以便在此计算机上记住我”或类似内容。)
答案 2 :(得分:0)
REMOTE_ADDR服务器变量将为请求者提供IP地址,您可以在允许的地址列表中再次检查它。
http://msdn.microsoft.com/en-us/library/ms524602.aspx
此外,您可以将IIS配置为仅允许IIS管理控制台中的某些IP地址并放弃代码,如果这是您的选项。