想知道这里最好的办法不会有其中第一个应用程序使用Windows身份验证两个应用程序并只包括一个钩在HTTP管道PostAuthenticate事件。如果用户已通过身份验证,则会为他们提供表单工单并重定向到使用表单身份验证的目标应用程序App2。您必须小心,Cookie不是路径特定的,并且两个应用程序驻留在同一台服务器上(或者加密密钥在web.config中同步)。如果用户未通过身份验证,则只需重定向他们,而不需要身份验证票,并在到达App2时登录。
应用1:www.myUrl.com \ MyApp的
这是该应用的 “公共” 的网址,并通过挂钩到PostAuthenticate事件检测网络用户(见Professional ASP.NET 2.0 Security, Membership, and Role Management):
//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
}
}
App2:www.myUrl.com \ MyApp2
这是实际应用。当网络用户从App1到达时,他们已经有表格票。当非网络用户到达时,他们将被重定向到login.aspx。
备注: 如果网络用户为App2书签,其中一个缺点是。我不太清楚我将如何解决这个问题。如果他们有一个没有过期的cookie,那么没关系。一种选择是在登录页面上添加一个链接,说明“我已经是网络用户 - 自动登录我”,它将链接回App1,他们将在那里登录?
我有一些代码来协助发布表格票。我会随时更新答案。
请注意,你将不得不做一些花哨的角色管理步法的应用2来处理不同的角色提供。上面的亚马逊参考文献是旧的,但是当我遇到这些自定义的认证和授权问题时,我发现自己经常引用它。
你打算如何模拟用户使用表单登录?你打算在ASP会员表中为他们创建用户吗? – Erix
是的。每个Windows用户都将拥有对应于asp成员资格中的用户的角色(Windows中的组)。因此,如果他们在Windows中的管理员组中,他们将以管理员用户身份登录到Forms中。对于Windows用户,只有与ASP成员表中的用户一样多的角色,每个角色都有一对一的关系(用户到角色)。 –