Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET成员身份与多个应用程序的自定义MachineKey以及安全风险_Asp.net_Web Config_Asp.net Membership_Security_Membership - Fatal编程技术网

ASP.NET成员身份与多个应用程序的自定义MachineKey以及安全风险

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。根据我的发现和理

这是一个分为两部分的问题。因此,我将从第一个开始,这将导致第二个。我在GoDaddy托管了一个站点,其中根是主要的web应用程序。然而,在一个子文件夹中,我创建了第二个web应用程序。两者都使用共享数据库上ASP.NET成员身份支持的表单身份验证。这意味着两者都在使用数据库aspnetdb。我试图实现的是能够登录到其中一个,从而同时登录到两个。单点登录(SSO),如果愿意的话。到目前为止,我发现如果应用程序位于同一服务器(IIS实例)上,那么它们将共享同一个MachineKey。根据我的发现和理解,表单身份验证使用MachineKey生成身份验证票证。因此,只要成员资格、角色和概要文件提供程序的应用程序名称匹配,就不需要进行任何修改

到目前为止我是准确的吗

但我一直没能让它起作用。所以我尝试了另外两个想法,但没有成功。 我在两个Web.config文件中都添加了以下内容(当然不是一起添加,而是单独添加)



产生于

以及一个示例成员资格配置

<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>