我目前正在开发一个intranet web应用程序,该应用程序有一个主页和几个部门页面,该web应用程序仅用于查看信息,因此每个人都将拥有相同的权限。我已经到了必须担心应用程序的访问和身份验证的地步,我的公司有一个包含几个组的活动目录,我可以使用,搜索了一段时间后,我得到了以下问题:
- 在webconfig文件中,我强制执行windows身份验证并阻止未通过身份验证的用户(deny-users=?)
- 我在某个地方看到我需要几个webconfig文件,每个页面一个,是这样吗?它是如何使每个页面连接到相应的webconfig的
- 看了一些例子后,我搞不清我的AD连接字符串(我目前在一台开发机器上),我们的AD组在我们的域控制器上,物理位置是"DCserver.company_name.local\city folder\groups"
- 我需要创建一个登录页面吗?我的意思是,这不是有点违背windows身份验证的意义吗
- 我不需要管理广告中的任何内容,我只想阅读小组并确保,例如,营销人员只能访问主页和营销部门页面
- 正如我在上面提到的,不会有特殊的特权,例如,市场营销部门的用户可以点击其部门页面中的所有内容
很抱歉有这么多问题,但我对c#和.net开发还比较陌生
以下是您最新一组问题的答案:
-在webconfig中,我可以指定可以访问每个部门页面以及主页的组吗?有点像下面的代码,如果是这样的话,在分配哪些组可以访问哪个页面之前,我需要放置我的ldap连接字符串,对吧?
[Dipra]您最好在不使用web.config中的角色的情况下进行身份验证,因为这也需要定义角色。我们在这里谈论的是广告组,用户将是其中的一部分。因此,在Page_Load()
中,只需调用身份验证方法,可能会将允许访问该页面的用户名和AD组作为参数进行传递。如果要使解决方案可配置,请将特定页面允许的AD组作为"密钥"存储在web.config中,然后在代码中读取它们。将组与用户名一起传递给您的身份验证方法。
-当用户打开网站时,系统会提示他插入windows凭据,这是自动的,对吧?然后他可以看到主页,然后进入他的部门页面,对吧?
[Dipra]是的,这是自动的。这不需要单独的代码。只要经过身份验证,他就可以访问他想要的任何页面。
-如果我理解正确的话,在每个pageload事件中,我都需要搜索用户名并检查他属于哪个组,对吗?
[Dipra]是的,您需要在每个Page_Load()
方法中进行该检查。作为一种方法,您可以尝试获取用户所属的所有组,然后检查该页面允许的AD组是否为这些组之一。如果是,则可以对用户进行身份验证。
-以上是真的,现在我要解释页面的导航,因为我认为扰乱页面加载可能会给我带来一些问题每次加载页面时都会检查用户属于哪些组吗?这不会让应用程序变慢吗?
[Dipra]每个服务器端控件,例如asp按钮,都会导致回发。为了确保Page_Load()
中的身份验证代码不会在每次页面上发生回发时都运行,请将该位包含在if(!Page.IsPostBack) {}
中。这意味着,当页面没有"回发"时,即第一次呈现时,此块中的任何代码都将运行。此页上服务器端控件的任何后续回发都将忽略此块内的代码。
-最后,为了检查每个用户的会员资格,我需要一个与Dipra发布的链接上的第二个答案类似的代码,我粘贴在下面,但在c#中,对吧?
[Dipra]您可以参考上面帖子中已接受的答案,可能需要进行一些调整。它已经在C#中了。
- 是的,你的web.config和你说的一样
- 您不需要为页面"授予"对特定组的访问权限。在web.config中,将允许访问特定页面的组存储为键,并像这样读取代码中的配置。例如,如果您有一个名为"Marketing"的
key
,则可以存储相应AD组的名称,允许该AD组访问value
字段中的"Marketing页面"。是的,一旦你让它在一个页面上工作,其他页面就会更容易 - 不,我谈到的身份验证方法是一种自定义方法,您将为自己编写,它将使用与我发布的链接中类似的逻辑
- 整个身份验证代码应包含在
try...catch
块中。如果在对AD进行身份验证时出现问题(例如,连接问题),则您的代码将引发异常。捕获(理想情况下记录)异常并将用户重定向到错误页面,可能表示存在一些问题阻碍了身份验证。在这种情况下,您不应该授予用户访问权限