使用另一个站点的 ASP.NET 成员身份在一个站点上进行身份验证
Authentication on one site using the ASP.NET membership of another
我们有一个站点为其用户帐户使用 ASP.NET 会员资格。假设此站点位于 www.domain.com
.
我们还有另一个站点,比方说 www.domain.com/site2
,由于其他原因,它已经连接到站点 #1 的数据库。我们想实现 username/password 登录到站点 #2,并希望使用站点 #1 的现有登录凭据,因为站点 #1 是他们申请访问各种系统等权限的地方。
我并不是要创建一种 SSO 类解决方案,即登录一个站点即登录另一个站点,这是其他问题所涉及的问题。
我希望他们能够输入他们在站点 #1 上的用户名和密码,在站点 #2 上输入并授权他们访问站点 #2。
这可能吗?
Web.config 站点 #1:
<machineKey decryptionKey="AutoGenerate" validation="SHA1" validationKey="AutoGenerate" />
<membership>
<providers>
<clear />
<add name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="VTDB"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="true"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="8"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="10"
applicationName="/" />
</providers>
</membership>
<profile>
<providers>
<clear />
<add name="AspNetSqlProfileProvider"
type="System.Web.Profile.SqlProfileProvider"
connectionStringName="VTDB"
applicationName="/" />
</providers>
</profile>
<roleManager enabled="true">
<providers>
<clear />
<add connectionStringName="VTDB"
name="AspNetSqlRoleProvider"
applicationName="/"
type="System.Web.Security.SqlRoleProvider" />
</providers>
</roleManager>
....
Web.config 站点 #2:
<membership defaultProvider="AspNetSqlMembershipProvider">
<providers>
<clear />
<add name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="VTConnString" />
</providers>
</membership>
<machineKey decryptionKey="AutoGenerate" validation="SHA1" validationKey="AutoGenerate" />
其中 VTConnString
指向站点 #1 的数据库。
但是当我在站点 #2 中调用 Membership.ValidateUser(userName, password)
时,它总是 returns false
.
我发现了问题:
我在站点 #2 的 web.config 中丢失了 applicationName="/"
。现在 applicationName
设置相同,它可以正常工作。
我们有一个站点为其用户帐户使用 ASP.NET 会员资格。假设此站点位于 www.domain.com
.
我们还有另一个站点,比方说 www.domain.com/site2
,由于其他原因,它已经连接到站点 #1 的数据库。我们想实现 username/password 登录到站点 #2,并希望使用站点 #1 的现有登录凭据,因为站点 #1 是他们申请访问各种系统等权限的地方。
我并不是要创建一种 SSO 类解决方案,即登录一个站点即登录另一个站点,这是其他问题所涉及的问题。
我希望他们能够输入他们在站点 #1 上的用户名和密码,在站点 #2 上输入并授权他们访问站点 #2。
这可能吗?
Web.config 站点 #1:
<machineKey decryptionKey="AutoGenerate" validation="SHA1" validationKey="AutoGenerate" />
<membership>
<providers>
<clear />
<add name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="VTDB"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="true"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="8"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="10"
applicationName="/" />
</providers>
</membership>
<profile>
<providers>
<clear />
<add name="AspNetSqlProfileProvider"
type="System.Web.Profile.SqlProfileProvider"
connectionStringName="VTDB"
applicationName="/" />
</providers>
</profile>
<roleManager enabled="true">
<providers>
<clear />
<add connectionStringName="VTDB"
name="AspNetSqlRoleProvider"
applicationName="/"
type="System.Web.Security.SqlRoleProvider" />
</providers>
</roleManager>
....
Web.config 站点 #2:
<membership defaultProvider="AspNetSqlMembershipProvider">
<providers>
<clear />
<add name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="VTConnString" />
</providers>
</membership>
<machineKey decryptionKey="AutoGenerate" validation="SHA1" validationKey="AutoGenerate" />
其中 VTConnString
指向站点 #1 的数据库。
但是当我在站点 #2 中调用 Membership.ValidateUser(userName, password)
时,它总是 returns false
.
我发现了问题:
我在站点 #2 的 web.config 中丢失了 applicationName="/"
。现在 applicationName
设置相同,它可以正常工作。