我正在开发使用Active Directory作为用户存储的Java应用程序。它正在使用UnboundID LDAP SDK访问AD。最初,我计划使用将使用服务帐户绑定到AD的连接池,并根据需要模拟用户,而无需再次输入用户名/密码。不幸的是,AD似乎不支持代理授权请求控制(RFC 4370)。它似乎也不支持SASL authzId字段“此外,它不允许在连接上建立与连接上使用的身份验证身份不同的授权身份”。来自https://msdn.microsoft.com/en-us/library/cc223500.aspx
有没有一种方法可以使我的解决方案正常运行而无需用其他目录替换AD?
用例::我们将Active Directory用作用户的身份存储。当用户登录时,我们通过执行绑定来验证其针对AD的凭据,然后是针对我们的授权提供者的OpenID工作流。之后,将认为用户已通过身份验证和授权,并颁发了访问令牌。在我们进入自助服务和委派管理部分之前,一切都很好。我们不希望用户看到他们不允许查看/修改的任何内容。我们通过在AD中管理权限来实现这一目标。即管理员用户可以解锁帐户。普通用户不能。如果使用服务帐户执行LDAP操作,我们将失去AD提供的所有扩展的安全模型。我们无法为每个登录用户维护持久连接,因为用户数量非常大,并且可能最终会导致成千上万个连接。我们希望维护一个通过服务帐户进行身份验证的连接池,并根据需要模拟用户。最简单的方法是使用代理授权。