繁体   English   中英

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

[英]Multiple applications running under single website - Forms authentication signin/signout issues

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

网站中有几个页面,但这些都是非常标准的 HTML 页面,没有太多内容。

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

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

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

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

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

任何帮助将不胜感激,因为到目前为止,我只是使用了我自己的基于 session 的身份验证来检查他们是否已登录,我想转向更新的 forms 身份验证方法。

确保您在数据库中配置了多个应用程序。 否则,尝试对一个页面进行身份验证将更新身份验证 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

来自评论:

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

这就是将用户从其他应用程序中注销的原因。 您正在有效地破坏其他应用程序使用的身份验证 cookie。 通过在每个应用程序的 web 配置中设置以下内容,您可以通过确保每个应用程序使用相同的验证密钥、hash 算法、解密密钥和解密算法来解决此问题:

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM