ldap客户端应该使用不同于最终用户的凭证来执行最终用户身份validation?

简短forms:我是否应该使用一些知名的uid来validationldap客户端,然后在该客户端中使用其他方法来validation用户input的uid和pw?

长forms:我们有一个基于.NET的商业networking产品,在许多客户站点上实现,目前使用内部用户authentication。

我正在调查使用LDAP进行身份validation目录。 由于我们的产品是在不同的环境中实现的,我希望它能够与LDAP兼容的目录服务和configuration(包括但不限于Active Directory)在最广泛的范围内兼容。

除了身份validation,我想使用用户的目录属性来确定他们是否有权使用应用程序。 我希望这会由用户在特定组中的成员身份来表示。 组的名称将是应用程序的configuration点。

目录服务仅用于确认用户标识,密码和组成员资格。 在处理用户的后续请求时,应用程序将不承担用户的身份。 所以,没有FormsAuthenticationTicket。

我的第一个问题之一来自我已经审查的身份validation示例,如http://tldp.org/HOWTO/LDAP-HOWTO/authentication.html和http://msdn.microsoft.com/en-us/library /ff649227.aspx 。 这些使用用户input的ID和密码来validationLDAP客户端。 我想这是合理的,但在我的情况下,客户端将继续进行其他LDAPsearch以确认组成员资格。 我是否需要担心最终用户可能没有足够的目录权限来进行会员资格检查? 在我看来,为ldap客户端身份validation使用保留凭据会更好,然后通过其他方法确认用户input的uid / pw。 或者,可能绑定两次,一次使用用户凭证进行身份validation,然后使用内置凭证进行search。 我应该这样做,还是只是把事情做得比他们需要的还要多?

最小特权的原则适用于此。 您用于绑定到LDAP并列举用户,组和其他任何相关信息的帐户绝对应该是“服务帐户”,而不是真正的人员帐户

与大多数人类用户相比,此帐户需要不同的权限。 VP的助理不需要枚举所有组,并查看给定的帐户是否存在,但是用于绑定到LDAP的帐户确实需要这个帐户。

如果您使用系统帐户授予常规用户帐户所不具备的权限,则您的权限已升级。 (在您的示例中,您的应用程序的用户可以看到他们自己看不到的组成员身份。)没关系,但请注意,任何权限升级都有可能被滥用。

就个人而言,我宁愿写我的ACL,使用户帐户拥有他们需要的任何特权,并使用我的LDAP服务器(而不是我的下游应用程序)来pipe理访问。 为什么你的用户账户不能看到他们属于哪个组?

至于“最小特权”,这意味着使用用户的凭证,因为他已经有权访问它们。 如果您使用共享的系统帐户,那么 – 按devise – 常规用户没有的额外权限。