LDAP:Web 应用程序和 RBAC

LDAP: Web Apps and RBAC

我对 LDAP 的一种工作方式的理解是,如果我错了请纠正我,用户可以从他的计算机登录并访问一堆 Web 应用程序,前提是他有权这样做并且凭据匹配。

我正在创建一个 Web 应用程序,我想使用 LDAP 配置它。因此,根据我的客户,我应该使用 LDAP API 并确保他具有这样做所需的权限。那么

你混淆了几件事。

  • 认证不同于授权
    • 身份验证是关于证明某人的某些信息,通常是证明某人的身份。我是鲍勃,因为我知道我的用户名和密码。
    • 授权是关于确定您将授予 Bob 的访问级别。有不同的授权(访问控制)范例。 RBAC 和 ABAC 是最流行的两种。 RBAC 使用角色、组和权限来确定用户是否应该获得访问权限。 ABAC 使用属性和策略。
  • LDAP 不是一种身份验证机制,也不是一种授权机制。 LDAP 是一个用户目录。它包含有关用户的信息,通常是用户名、全名、电子邮件、密码、组成员身份、角色信息等。有标准化的 LDAP 对象,例如inetOrgPerson.

应用程序(任何类型的应用程序)使用不同的身份验证技术。在 Java 网络世界中,有一种叫做 JAAS 的东西。

The Java Authentication and Authorization Service (JAAS) is a set of application program interfaces (APIs) that can determine the identity of a user or computer attempting to run Java code, and ensure that the entity has the privilege or permission to execute the functions requested... (Wikipedia)

在 .NET 中,您有一个名为 WCF 的框架,其中有一个专门的部分 security

考虑到这一点,让我们回到您的问题。如果你有一个 Java 网络应用程序并且你使用 LDAP 作为用户目录,那么你很可能会实现 通过 JAAS 在您的应用程序和 LDAP 之间进行集成。

LDAP 会向您的应用发送密码吗? NOOOOOOOO 从来没有,那将是一个糟糕的主意。顺便说一下,希望您的 LDAP 不会明文存储密码。通常密码会被单向加密(散列),即不可能从加密值中检索密码值。

那么,LDAP(通过 JAAS)能告诉您什么?

  • username/password组合是否有效
  • 用户有什么角色
  • 用户有哪些组
  • 和可选的更多。一旦您知道了用户的 ID(或 LDAP 术语中的 DN),您就可以查询 LDAP 以获得更多属性。

最后一件事。通常身份验证(和授权)不直接由应用程序处理,而是由应用程序的容器处理。如果您编写一个 Java 网络应用程序,您很可能会 运行 它在 Apache Tomcat 中。 Tomcat 附带 JAAS,并与 Tomcat 的内部用户存储以及其他(例如 LDAP 或数据库)本地集成。

所以您的第一个问题应该是:我用什么语言编写应用程序?我怎么会运行呢?我能免费得到什么吗?

这里是关于保护 Java 网络应用程序的 old Oracle tutorial

LDAP 是一种用于查询 AD 和其他支持用户目录中的项目的协议。它是一种与 AD 用户通信并由此进行身份验证的媒介。通过身份验证后,您可以检查用户的授权。在任何应用程序上实施 RBAC 包括身份验证、授权和审计。

  1. 身份验证:确认用户身份
  2. 授权:定义用户在应用程序中可以做什么
  3. 审计:跟踪应用程序中的敏感交易

通过 LDAP,您可以使用或不使用密码(如果当前用户)与 AD 用户进行通信和验证。可能并非所有平台都支持它,因此请检查您 OS 上的用户目录是否支持 LDAP 进行通信。