代码之家  ›  专栏  ›  技术社区  ›  jim

将一个ASP.NET成员资格数据库与多个应用程序一起使用单一登录

  •  20
  • jim  · 技术社区  · 16 年前

    我在一台IIS服务器上有两个ASP.NET应用程序,我希望使用相同的后端ASP U安全数据库和成员资格提供程序。我已经读到,我所要做的就是在两个web配置中引用相同的应用程序名,就像我现在所做的那样,但我一定是做错了什么。

    在每个应用程序web.config中,我都有这个部分。

    <membership>
      <providers>
        <clear/>
        <add name="AspNetSqlMembershipProvider"
                  type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
                  connectionStringName="membership"
                  enablePasswordRetrieval="false"
                  enablePasswordReset="true"
                  requiresQuestionAndAnswer="false"
                  applicationName="/"
                  requiresUniqueEmail="false"
                  minRequiredPasswordLength="5"
                  minRequiredNonalphanumericCharacters="0"
                  passwordFormat="Hashed"
                  maxInvalidPasswordAttempts="5"
                  passwordAttemptWindow="10"
                  passwordStrengthRegularExpression=""
                  />
      </providers>
    </membership>
    

    当我从应用程序A登录并浏览到应用程序B时,应用程序B似乎对我或应用程序A中的凭据一无所知。有人知道我做的错误吗?

    2 回复  |  直到 15 年前
        1
  •  21
  •   jim    16 年前

    为了结束,我将回答我是如何实现我最初的问题所要求的目标的。

    我在一台IIS服务器上有两个ASP.NET应用程序。这是我的目标,所以当用户登录到App1时,他们的用户凭证将在App2中可用。配置ASP.NET成员资格提供程序只是我正在寻找的一个步骤。即使两个应用程序都使用相同的后端数据库和提供者,当我点击App2时,我仍然不会得到身份验证。我在寻找一个单一的登录解决方案。

    一旦您的两个应用程序都指向您的ASP U成员资格数据库,请将以下内容放入Web配置的system.web部分

    <authentication mode="Forms" />
    <membership>
      <providers>
        <clear/>
        <add name="AspNetSqlMembershipProvider"
                  type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
                  connectionStringName="membership"
                  applicationName="/"
                  />
      </providers>
    </membership>
    <roleManager enabled="true" />
    

    确保两者都设置了相同的applicationname属性。

    我使用的是IIS6,所以我将它配置为自动生成两个应用程序的机器密钥。因为这两个应用程序都在同一台机器上,所以密钥是相同的,这是使SSO工作的关键部分。在设置了IIS之后,以下内容被添加到我的web.config中

        <machineKey decryptionKey="AutoGenerate" validation="SHA1" validationKey="AutoGenerate" />
    

    这就是一切。完成后,我可以登录到App1,然后浏览到App2并保留我的安全凭证。

    谢谢你朝正确的方向推。

        2
  •  2
  •   Ahmad    16 年前

    如果我的理解正确地为我服务,那么用户身份验证凭证将存储在每个应用程序的HTTP上下文中。因此,在两个应用程序之间切换不会自动对用户进行身份验证,因为切换到应用程序B时将创建新的上下文。

    我相信正确的方法可能是使用 DefaultCredentials (或) UseDefaultCredentials 属性到 True )切换到应用程序B之前的当前用户。

    当你说“切换”时,你的意思是什么,例如打开一个不同的浏览器窗口,访问应用程序B或从应用程序B请求一个页面?

    推荐文章