【问题标题】:asp.net c# web app with active directory and windows authentication具有活动目录和 Windows 身份验证的 asp.net c# web 应用程序
【发布时间】:2013-11-25 17:08:32
【问题描述】:

我目前正在开发一个 Intranet Web 应用程序,有一个主页和几个部门页面,该 Web 应用程序仅用于查看信息,因此每个人都将拥有相同的权限。我已经到了必须担心应用程序的访问和身份验证的地步,我的公司有一个活动目录,其中包含几个我可以使用的组,在搜索了一段时间后,我得到了以下问题:

  • 在 webconfig 文件中,我强制 Windows 身份验证并阻止未经身份验证的用户(拒绝用户 = ?)
  • 我在某处看到我需要几个 webconfig 文件,每个页面一个,是这样吗?如何让每个页面连接到对应的webconfig?
  • 查看一些示例后,我无法确定我的 AD 连接字符串(我目前在开发机器上),我们的 AD 组在我们的域控制器上,物理位置是“DCserver.company_name.local\city文件夹\组”
  • 我需要创建一个登录页面吗?我的意思是这不是有点违背拥有 Windows 身份验证的观点吗?
  • 我不需要管理 AD 中的任何内容,我只是想阅读组并确保,例如,营销人员只能访问主页和营销部门页面
  • 正如我在上面提到的那样,不会有特殊特权,例如来自市场营销部门的用户将能够点击其部门页面中的所有内容

对于所有问题,我很抱歉,但我对 c# 和 .net 开发还比较陌生

【问题讨论】:

    标签: c# asp.net active-directory windows-authentication intranet


    【解决方案1】:

    以下是您最新一组问题的答案:

    -我可以在 webconfig 中指定有权访问每个部门页面以及主页的组吗?有点像下面的代码,如果是这样,我需要在分配哪些组可以访问哪个页面之前放置我的 ldap 连接字符串,对吧?

    [Dipra] 您最好不要使用 web.config 中的角色进行身份验证,因为这也需要定义角色。我们在这里讨论的是 AD 组,用户将成为其中的一部分。因此,在Page_Load() 中,只需调用身份验证方法,可能会传递用户名和允许访问页面的AD 组作为参数。如果您想让您的解决方案可配置,请将特定页面的允许 AD 组存储为您的 web.config 中的“键”,然后在您的代码中读取它们。将组与用户名一起传递给您的身份验证方法。

    -当用户打开网站时,系统会提示他插入他的 Windows 凭据,这是自动的,对吗?然后他就可以看到主页,然后转到他的部门页面,对吗?

    [Dipra] 是的,这是自动的。这不需要单独的代码。只要他经过身份验证,他就可以转到他想要的任何页面。

    -如果我理解正确,在每个 page_load 事件中我都需要进行搜索,获取用户名并检查他所属的组,对吗?

    [Dipra] 是的,您需要在每个 Page_Load() 方法中进行检查。作为一种方法,您可以尝试获取用户所属的所有组,然后检查该页面允许的 AD 组是否是这些组之一。如果是,则可以对用户进行身份验证。

    -i 以上是真的,现在我要解释页面的导航,因为我认为弄乱 page_load 可能会给我带来一些问题 每次页面加载都会检查用户所属的组吗?这不会让应用变慢吗?

    [Dipra] 每个服务器端控件,例如 asp 按钮,都会导致回发。为确保Page_Load() 中的身份验证代码不会在每次页面上发生回发时运行,请将该位包含在if(!Page.IsPostBack) {} 中。这意味着该块中的任何代码都将在页面未被“回发”时运行,即第一次呈现。此页面上服务器端控件的任何后续回发都将忽略此块内的代码。

    -最后,要检查每个用户的成员资格,我需要一个与 The Link that Dipra posted 上的第二个答案类似的代码,我粘贴在下面但在 c# 中,对吗?

    [Dipra] 您可以参考上述帖子中接受的答案,可能需要进行一些调整。它已经在 C# 中了。

    【讨论】:

      【解决方案2】:
      1. 是的,您的 web.config 就像您所说的那样。
      2. 您无需为页面“授予”对特定组的访问权限。在 web.config 中,将允许访问特定页面的组存储为键,并在您的代码中读取配置,例如 this。例如,如果您有一个名为“Marketing”的key,那么您可以在value 字段中存储相应AD 组的名称,该组允许访问Marketing 页面。是的,一旦你让它在一个页面上工作,其他页面会更容易。
      3. 不,我所说的身份验证方法是您为自己编写的自定义方法,它将使用类似于我发布的链接中的逻辑。
      4. 整个身份验证代码应包含在try...catch 块中。如果在对您的 AD 进行身份验证时出现问题(例如,连接问题),那么您的代码将引发异常。捕获(并理想地记录)异常并将用户重定向到错误页面,可能表示存在一些阻止身份验证的问题。在这种情况下,您不应授予用户访问权限。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-02
        • 1970-01-01
        • 2017-10-27
        相关资源
        最近更新 更多