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

问题描述 投票:0回答:3

我在一台 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>

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

asp.net asp.net-membership membership
3个回答
21
投票

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

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

一旦您的两个应用程序都指向您的 asp_membership 数据库,请将以下内容放入 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 属性集。

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

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

仅此而已。完成后,我可以登录 app1,然后浏览到 app2 并保留我的安全凭证。

感谢您朝着正确的方向推动。


2
投票

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

我认为正确的方法可能是在切换到应用程序 B 之前使用当前用户的

DefaultCredentials
(或
UseDefaultCredentials
属性到
True
)。

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


0
投票

我目前有一个使用SSO方法的项目,那么该方法只是将Web配置与机器密钥相匹配,MVC不需要额外的编码吗?

© www.soinside.com 2019 - 2024. All rights reserved.