0

我在一台服务器上有两个在 IIS7.5 上运行 asp.net 2.0 的网站,它们受表单身份验证的保护。

URL 是这样的:

 https://customerx.mydomain.com/site1/
 https://customerx.mydomain.com/site2/

两个网站都运行相同的 Web 应用程序,但位于不同的文件夹中,并连接到不同的数据库。这两个站点都为SSO(单点登录)做好了准备 。用户打开site1的登录页面并使用他的凭据进行身份验证(表单身份验证;成员资格提供者)。在起始页上有一个指向site2的超链接,在site2 的起始页上有一个指向site1 的链接。所以用户可以从一个站点跳转到另一个站点。

SSO 已通过两个应用程序中的以下 web.config 条目(相同的 cookie 名称和机器密钥)得到解决:

<authentication mode="Forms">
  <forms loginUrl="~/login.aspx" defaultUrl="~/default.aspx" 
         timeout="60" name=".customerxcookie" />
</authentication>
<authorization>
  <deny users="?" />
  <allow users="*" />
</authorization>
<machineKey validationKey="...myvalidationkey..." validation="SHA1" />

每个用户都有多个用户权限,可以查看网站上更多或更少的数据。具有用户权限的用户数据在两个站点上都是平等的。

如果我在 site1 上以管理员身份登录,然后跳转到 site2 等并注销,我只从一个站点注销,因此无法在不再次登录的情况下打开其中一个站点。没有问题。我正在使用 LoginStatus 控件进行注销:

protected void LoginStatus1_LoggedOut( object sender, EventArgs e )
{
    FormsAuthentication.SignOut();
    Session.Abandon();
}

现在的问题:如果我在管理员注销后 使用在站点 1 上具有较少权限的用户凭据登录:在站点 1 上没问题,但是当我跳转到站点 2 时,它会按预期显示用户名,但他拥有管理员的所有权限和通过他的用户权限可以看到所有不允许的东西。

我发现有两个cookie(firefox):

customerx.mydomain.com      customerxcookie
customerx.mydomain.com      .ASPXANONYMOUS

如果我删除 cookie customerxcookie下一次登录工作正常。但是每次更改用户时我都需要这样做。

有什么建议么?

4

1 回答 1

1

如果 cookie 的存在是问题所在,那么如何获取所有 cookie 并在注销时手动使它们过期:

string[] myCookies = Request.Cookies.AllKeys;
foreach (string cookie in myCookies)
{
  Response.Cookies[cookie].Expires = DateTime.Now.AddDays(-1);
}
于 2013-07-31T14:26:26.557 回答