Jef*_*ddy 10 .net asp.net authentication
我目前正在开发一个MVC3 Web应用程序,需要使用外部网用户登录并使用Forms身份验证进行身份验证.Intranet用户应使用Windows身份验证自动登录.
我发现这篇文章,
http://aspalliance.com/553_Mixed_Mode_Authentication.all
但是它的日期是2004年11月,并且喜欢找到比7年前更新的内容.
我的计划是在IIS中有两个应用程序,虚拟目录指向同一个物理目录,但是一个允许匿名访问而另一个不允许.
当用户在Windows/Intranet方面进行身份验证时,我希望简单地模拟通过表单身份验证登录的用户.这种方法有什么缺陷吗?有更好的想法吗?
编辑:2011年7月22日
我正在使用IIS7,它不允许我做旧文章中建议的许多事情.由于IIS7和ASP.NET网站之间的身份验证集成有点紧张,因此不允许使用某些内容.例如,我无法在单个文件上设置Windows Auth,而应用程序的其余部分使用Forms Auth.
想知道这里的最佳方法是否不是拥有两个应用程序,其中第一个应用程序使用 Windows 身份验证,并且仅包含 HTTP 管道中的 PostAuthenticate 事件的挂钩。如果用户已通过身份验证,您将为他们提供表单票证并重定向到使用表单身份验证的目标应用程序 App2。您必须小心,cookie 不是特定于路径的,并且两个应用程序驻留在同一服务器上(或者加密密钥在 web.config 中同步)。如果用户未经过身份验证,您只需在没有身份验证票的情况下重定向他们,他们就会在到达 App2 时登录。
应用程序1:www.myUrl.com\MyApp
这是应用程序的“公共”url,并通过挂钩 PostAuthenticate 事件来检测网络用户(请参阅专业 ASP.NET 2.0 安全性、成员身份和角色管理):
//Hook PostAuthenticateRequest inside of global.asax
void Application_PostAuthenticateRequest(Object sender, EventArgs e)
{
IPrincipal p = HttpContext.Current.User;
if (p.Identity.IsAuthenticated)
{
// to do: give them a non-path specific ticket and redirect to App2
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序2:www.myUrl.com\MyApp2
这是实际应用。当网络用户从 App1 到达时,他们已经拥有一张表单票证。当非网络用户到达时,他们将被重定向到login.aspx。
注意: 这样做的一个缺点是网络用户是否将 App2 添加为书签。我不太确定如何解决这个问题。如果他们有一个不过期的 cookie,那就没什么大不了的了。一种选择是在登录页面上放置一个链接,上面写着“我已经是网络用户 - 自动登录”,该链接会链接回 App1,他们将在哪里登录?
我有一些代码可以帮助发出表格票证。我会在有时间时更新答案。
请注意,您将必须在 App2 中执行一些奇特的角色管理步骤来处理不同的角色提供者。上面的亚马逊参考资料已经很旧了,但是当我遇到此类自定义身份验证和授权问题时,我发现自己不断参考它。
归档时间: |
|
查看次数: |
1963 次 |
最近记录: |