使用一个Asp.net成员资格数据库与多个应用程序单点登录

jim*_*jim 20 membership asp.net asp.net-membership

我在一台IIS服务器上有两个asp.net应用程序,我想使用相同的后端asp_security数据库和成员资格提供程序.我已经读过我所要做的就是在两个网络配置中引用相同的应用程序名称,就像我现在所做的那样,但我一定做错了

在每个应用程序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>
Run Code Online (Sandbox Code Playgroud)

当我从应用程序A登录并浏览到应用程序B时,应用程序B似乎对我或我的应用程序A的凭据一无所知.任何人都有任何想法,我做错了什么?

jim*_*jim 21

为了关闭起见,我将回答我是如何实现我的原始问题所要求的目标.

我在一台IIS服务器上有两个asp.net应用程序.我的目标是,当用户登录app1时,可以在app2中使用他们的用户凭据.配置asp.net成员资格提供程序只是我所寻求的一步.即使两个应用程序都使用相同的后端数据库和提供程序,当我点击app2时仍然无法进行身份验证.我正在寻找的是单点登录解决方案.

通过将以下内容放在Web配置的system.web部分中,将两个应用程序指向您的asp_membership数据库

<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" />
Run Code Online (Sandbox Code Playgroud)

确保两者都具有相同的applicationname属性集.

我使用的是IIS 6,因此我将其配置为自动生成两个应用程序的机器密钥.由于这两个应用程序都位于同一台机器上,因此密钥是相同的,这是使SSO工作的关键部分.设置IIS后,我的web.config中添加了以下内容

    <machineKey decryptionKey="AutoGenerate" validation="SHA1" validationKey="AutoGenerate" />
Run Code Online (Sandbox Code Playgroud)

这就是它的全部内容.完成后,我可以登录到app1,然后浏览到app2并保留我的安全凭据.

感谢您向正确的方向努力.