SingleSignOn(SSO)形成身份验证注销

时间:2013-07-31 13:45:11

标签: asp.net cookies forms-authentication single-sign-on membership-provider

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

网址如下:

 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();
}

现在出现问题: 如果我使用在site1上具有较少权限的用户凭据登录在管理员注销后:在site1上没关系,但是当我跳转到site2时,它会向我显示用户名,但是他拥有所有权利来自管理员可以通过他的用户权限查看所有不允许的内容。

我发现有两个cookie(firefox):

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

如果我删除了Cookie customerxcookie ,则下次登录工作正常。但每当我改变用户时,我都需要这样做。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果存在cookie是问题,那么如何获取所有cookie并在Logout上手动使它们到期:

string[] myCookies = Request.Cookies.AllKeys;
foreach (string cookie in myCookies)
{
  Response.Cookies[cookie].Expires = DateTime.Now.AddDays(-1);
}