在单个网站下运行的多个应用程序 - 表单身份验证登录/注销问题

时间:2011-06-01 16:03:37

标签: asp.net

我在IIS7中的一个网站下运行了几个应用程序。

网站上有几个页面,但这些页面都是非常标准的HTML页面,并没有很多。

主网站有自己的应用程序池,每个子应用程序都有自己的文件夹和关联的应用程序池。

我使用表单身份验证和我自己的自定义登录系统,该系统使用SQL数据库来存储凭据。

每个子应用程序都有自己的登录页面,但它们共享相同的凭据和数据库,据我所知,这是最好的方式,因为用户可以访问最多4个这样的应用程序,并且单个用户名/密码是最实用的。

我遇到的问题是,当您登录一个应用程序,然后继续登录另一个应用程序时,您将退出第一个应用程序。这是在任何进程关闭或超时等之前。

如何让用户登录多个应用程序需要做什么?但请记住,他们可能无法访问所有这些内容,因此他们无法共享单个机器密钥或认证cookie,因为我已经阅读过。

任何帮助都会受到高度赞赏,因为到目前为止我只使用自己的基于会话的身份验证来检查他们是否已登录,我想转到更新的表单身份验证方法。

2 个答案:

答案 0 :(得分:0)

确保在数据库中配置了多个应用程序。否则,尝试对一个页面进行身份验证将更新auth cookie并使旧cookie无效 - 这将导致从所有其他应用程序注销的所述行为。应用程序名称在应用程序的web.config文件中设置:

...
<membership defaultProvider="SqlProvider">
  <providers>
    <clear/>
    <add connectionStringName="Connect" applicationName="myFirstApp" ...
....

对于多应用程序方法,您最有可能必须为每个应用程序复制用户。由于您的用户不会自动被允许对所有应用进行身份验证,我认为这是可以的。

另一种方法是对所有应用使用相同的登录程序 - 因此在应用程序之间共享auth cookie。什么,你似乎试图阻止。如果重复的用户打扰了您,我想,您必须编写自己的自定义成员资格提供程序。

请参阅:http://msdn.microsoft.com/en-us/library/f1kyba5e.aspx

答案 1 :(得分:0)

来自评论:

  
    

我只需检查凭据,然后将用户名的FormsAuthentication.SetAuthCookie设置为true。

  

这是将用户从其他应用程序中记录下来的原因。您实际上正在破坏其他应用程序使用的身份验证cookie。您可以通过在每个应用程序的Web配置中设置以下内容来确保每个应用程序使用相同的验证密钥,哈希算法,解密密钥和解密算法来解决此问题:

<machineKey 
    validationKey="..." 
    validation="SHA1" 
    decryptionKey="..." 
    decryption="AES" />

这应该使每个站点都使用相同的身份验证cookie。

另一种解决方案是通过设置以下内容来确保每个应用程序使用不同的cookie:

<authentication mode="Forms">
    <forms loginUrl="..." 
        protection="All" 
        name=".MyAppName"/>
</authentication>

在这种情况下,您可以将MyAppName设置为每个应用程序的不同内容。用户仍然可以在所有应用程序中使用相同的凭据,但他们必须单独登录每个应用程序。