C# 许多不同文件夹的asp.net授权

C# 许多不同文件夹的asp.net授权,c#,asp.net,logging,C#,Asp.net,Logging,我正在使用asp.net(c#) 问题: 我需要允许用户从不同页面登录: www.mypage.com/login.aspx www.mypage.com/orgs/org-1/login.aspx www.mypage.com/orgs/org-2/login.aspx www.mypage.com/orgs/org-3/login.aspx 。。。其中1、2、3等为组织ID 目前,当我打开www.mypage.com/orgs/org-1/login.aspx时,用户被重定向到www.my

我正在使用asp.net(c#)

问题:

我需要允许用户从不同页面登录:

www.mypage.com/login.aspx
www.mypage.com/orgs/org-1/login.aspx
www.mypage.com/orgs/org-2/login.aspx
www.mypage.com/orgs/org-3/login.aspx
。。。其中1、2、3等为组织ID

目前,当我打开www.mypage.com/orgs/org-1/login.aspx时,用户被重定向到www.mypage.com/login.aspx

整个故事: 我有一个不是我自己编写的应用程序。它有一个主登录页(www.mypage.com/login.aspx)。 但它也有许多不同的登录页面——每个组织都有自己的登录页面,位于Orgs/Org ID/login.aspx文件夹中。这是必要的,因为组织希望在其登录页面上有不同的颜色方案、徽标、一些额外信息、自定义欢迎声明和其他自定义内容

我以前没有做过,但现在的计划如下: 1) www.mypage.com/login.aspx是基本登录页面;每个人都可以从这个页面登录。它起作用了。 2) 有一个文件OrgLogin.aspx(请注意,codebhind=“Login.aspx.cs”!!)包含一些组织的自定义登录页面。它与Login.aspx稍有不同,但使用相同的代码隐藏

3) 当应用程序管理员从应用程序界面创建新组织时,OrgLogin.aspx文件被复制到一个位置www.mypage.com/orgs/org-1/login.aspx(其中1是组织id,它会更改),并将此文件重命名为login.aspx。 如果组织管理员愿意,每个login.aspx文件都可以自定义。如果他们不需要,则使用默认页面

到目前为止,这一点是明确的,但以下几点不起作用: 4) 必须允许用户从不同页面登录: www.mypage.com/orgs/org-1/login.aspx->显示相应文件夹中的login.aspx(根文件夹中的login.aspx.cs是CodeBehind) www.mypage.com/orgs/org-2/login.aspx ... 目前,当我导航到www.mypage.com/orgs/org-2/login.aspx时,系统会将用户重定向到www.mypage.com/login.aspx?returnurl

编辑 文件夹的完整结构如下所示: orgs/org-/login.aspx->应该可以访问,而无需重定向到root登录 orgs/org-/forgotpassword.aspx->应该可以访问,而无需重定向到根forgotpassword orgs/org-/document(文件夹)->在没有身份验证的情况下不应可访问 orgs/org-/images(文件夹)->在没有身份验证的情况下不应可访问

我读过一些解决方案,当只有两个不同的文件夹时,它们通常具有不同的角色(管理员和非管理员),例如


但这不是我的情况。

您可以使用URL重写来实现这一点(只要您在.NET 3.5 SP1+上使用。您的流程将遵循以下几点:

  • www.mypage.com/orgs/org-2/login.aspx
    被重写为
    www.mypage.com/login.aspx
    ,org-2存储在路由值中
  • login.aspx使用该组织的所有自定义配色方案、徽标等信息查询数据库,并适当配置页面(或者如果路由值为空,则显示默认值)
  • 所有实际登录代码都在一个页面上,即
    www.mypage.com/login.aspx
    。这避免了所有重定向类型问题

  • 如果您的
    orgs/org-*
    文件夹仅包含
    OrgLogin.aspx
    页面,您可以放置
    web.config
    文件以允许访问该页面/避免重定向。此
    web.config
    文件的内容将是

    <?xml version="1.0"?>
    <configuration>    
        <system.web>
            <authorization>             
                <allow users="*"/>
            </authorization>
        </system.web>    
    </configuration
    
    
    
    它是在用户进入登录页面后立即重定向还是在用户登录后重定向?如果是在他们登录之后,听起来像是登录脚本本身在做。这不起作用,因为orgs/org-1/login.aspx不同于orgs/org-2/login.aspx等。创建组织时,这些页面是相同的,但组织管理员可以自定义login.aspx查看页面。因此,我不能只使用一个login.aspx查看页面。您可以通过此设置为组织管理员自定义访问权限,您只需将其更改保存到数据库。使用css,您可以让他们几乎100%地控制登录页面的外观,并且仍然将其保存在一个物理页面上。这是允许组织管理员“手动”编辑login.aspx页面的要求。我没有可能将他们的更改保存在DB中。我已经更新了我的帖子。您可以看到,在给定的目录中还有一些其他子文件夹(不是文件),在没有身份验证的情况下不应访问这些子文件夹。它还包含ForgotPassword.aspx,它也是自定义的。我应该在哪里添加这个web.config?注意thingat org-*文件夹由系统动态创建。请注意,我只有登录,没有登录页面。Orglogin.aspx只是一个模板,可以复制并重命名为login.aspx。@renathy this web.config应该位于org-*文件夹中。复制orglogin.aspx时,您可以手动复制粘贴每个文件夹中的文件。
    <configuration>
       <location path="Login.aspx">
          <system.web>
             <authorization>
                <allow users="*"/>
             </authorization>
          </system.web>
       </location>       
    </configuration>