ASP.NET成员身份与多个应用程序的自定义MachineKey以及安全风险
这是一个分为两部分的问题。因此,我将从第一个开始,这将导致第二个。我在GoDaddy托管了一个站点,其中根是主要的web应用程序。然而,在一个子文件夹中,我创建了第二个web应用程序。两者都使用共享数据库上ASP.NET成员身份支持的表单身份验证。这意味着两者都在使用数据库aspnetdb。我试图实现的是能够登录到其中一个,从而同时登录到两个。单点登录(SSO),如果愿意的话。到目前为止,我发现如果应用程序位于同一服务器(IIS实例)上,那么它们将共享同一个MachineKey。根据我的发现和理解,表单身份验证使用MachineKey生成身份验证票证。因此,只要成员资格、角色和概要文件提供程序的应用程序名称匹配,就不需要进行任何修改 到目前为止我是准确的吗 但我一直没能让它起作用。所以我尝试了另外两个想法,但没有成功。 我在两个Web.config文件中都添加了以下内容(当然不是一起添加,而是单独添加)ASP.NET成员身份与多个应用程序的自定义MachineKey以及安全风险,asp.net,web-config,asp.net-membership,security,membership,Asp.net,Web Config,Asp.net Membership,Security,Membership,这是一个分为两部分的问题。因此,我将从第一个开始,这将导致第二个。我在GoDaddy托管了一个站点,其中根是主要的web应用程序。然而,在一个子文件夹中,我创建了第二个web应用程序。两者都使用共享数据库上ASP.NET成员身份支持的表单身份验证。这意味着两者都在使用数据库aspnetdb。我试图实现的是能够登录到其中一个,从而同时登录到两个。单点登录(SSO),如果愿意的话。到目前为止,我发现如果应用程序位于同一服务器(IIS实例)上,那么它们将共享同一个MachineKey。根据我的发现和理
或
产生于
以及一个示例成员资格配置
<membership
defaultProvider="SqlProvider"
userIsOnlineTimeWindow="20">
<providers>
<remove name="AspNetSqlProvider" />
<add name="SqlProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="aspnetdb"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
passwordFormat="Hashed"
applicationName="/" />
</providers>
</membership>
[更新]
-我决心尽快找到解决这个问题的办法。如果您也在搜索解决方案,请继续关注…Jeff,据我所知,虚拟目录实际上将继承父目录的身份验证设置。您是否尝试过在虚拟目录(子目录)的web.config中未指定任何与身份验证相关的内容?您的意思是删除辅助应用程序的web.config中对成员身份的所有引用?我还没来得及尝试,但会更新结果。实际上,现在我想,这打破了登录任何一个站点并因此同时登录两个站点的意图:(您已经希望它们共享相同的aspnetdb和应用程序名/right?因此本质上它们是相同的,您可以通过在虚拟目录的web.config中指定一个authentication/forms标记来切换不同的登录页面。Jeff,据我所知,虚拟目录实际上会继承auth父目录的诱惑设置。您是否尝试过,但没有在虚拟目录(子目录)的web.config中指定任何与身份验证相关的内容?你的意思是删除辅助应用程序的web.config中对成员身份的所有引用吗?我还没来得及尝试,但会更新结果。实际上,现在我想起来了,这打破了登录任一站点并因此同时登录两个站点的意图:(您已经希望它们共享相同的aspnetdb和应用程序名/right?因此本质上它们是相同的,您可以通过在虚拟目录的web.config中指定身份验证/forms标记来切换不同的登录页面。
<machineKey
validationKey="93A258D47F48AF07AB8BE3EF56C9D32897B9C458F2E14DB6F9AA47D77E40F4CA763D4BD56C2900B507073023F4C43C583A1F7086C2DD327C879368B0449EFB10"
decryptionKey="6BE371E3CDE768B71D0D261370127BAE094984D207EFD4B55FB24384FE1795D1"
validation="SHA1" decryption="AES" />
<membership
defaultProvider="SqlProvider"
userIsOnlineTimeWindow="20">
<providers>
<remove name="AspNetSqlProvider" />
<add name="SqlProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="aspnetdb"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
passwordFormat="Hashed"
applicationName="/" />
</providers>
</membership>