具有活动目录和Windows身份验证的asp.net c#web应用程序

时间:2013-11-25 17:08:33

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

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

    在webconfig文件中
  • ,我强制执行Windows身份验证并阻止未经过身份验证的用户(拒绝用户=?)
  • 我在哪里看到我需要几个webconfig文件,每个页面一个,是这样吗?如何使每个页面连接到相应的webconfig?
  • 看了一些例子后我无法找出我的AD连接​​字符串(我目前在开发机器上),我们的AD组在我们的域控制器上,物理位置是“DCserver.company_name.local \ city文件夹\基团“
  • 我是否需要创建登录页面?我的意思是,这有点与Windows身份验证相悖吗?
  • 我不需要管理AD中的任何内容,我只想阅读这些群组,并确保营销人员只能访问主页和营销部门页面
  • 正如我在那里提到的那样,没有特殊的特权,例如,营销用户可以点击其部门页面中的所有内容。

我很抱歉所有的问题,但我对c#和.net开发相对较新

2 个答案:

答案 0 :(得分:0)

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

- 在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#中了。

答案 1 :(得分:0)

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