Python Flask如何获取LDAP认证的DN等项的值



我使用https://flask-ldap3-login.readthedocs.io/en/latest/quick_start.html#basic-application,它附带一个示例脚本,其中包含以下

# Hostname of your LDAP Server
app.config['LDAP_HOST'] = 'ad.mydomain.com'
# Base DN of your directory
app.config['LDAP_BASE_DN'] = 'dc=mydomain,dc=com'
# Users DN to be prepended to the Base DN
app.config['LDAP_USER_DN'] = 'ou=users'
# Groups DN to be prepended to the Base DN
app.config['LDAP_GROUP_DN'] = 'ou=groups'
# The RDN attribute for your user schema on LDAP
app.config['LDAP_USER_RDN_ATTR'] = 'cn'

我假设我可以通过运行nslookup -type=srv _ldap._tcp.mydomain.co.uk并使用该值来获得app.config['LDAP_HOST'],但我该如何处理其余的?

我已经运行了get-aduser jo.bloggs -Properties *,但这给了我很多值,我不确定从哪里开始

任何建议吗?

感谢

使用SRV记录是一个很好的方法——比假设"ad.example.com"要好得多。直接作为服务器使用。(即使该名称确实指向所有dc,您也不能使用TLS或Kerberos,因为两者都依赖于所提供的服务器的确切名称。)

请注意,目录服务器可以来也可以去,所以SRV查找的结果不应该硬编码在应用程序中。

app.config['LDAP_BASE_DN']

目录的基本DN(可以有多个)可以通过读取rootDSE条目来找到—一些LDAP库具有内置的功能,而在其他库中,您只需在空DN进行搜索例如,""作为基础(BASE作为搜索范围,这通常用于读取单个条目)。

在rootDSE条目中,namingContexts属性将包含该服务器中所有分区的基本DNs,而defaultNamingContext专门指向"primary"包含用户对象等的分区。

$ ldapsearch -x -b "" -s base * +
dn: 
defaultNamingContext: DC=ad,DC=example,DC=com
namingContexts: DC=ad,DC=example,DC=com
namingContexts: DC=DomainDnsZones,DC=ad,DC=example,DC=com
namingContexts: DC=ForestDnsZones,DC=ad,DC=example,DC=com

对于Active Directory,您可以采取快捷方式并机械地从AD域名中生成DN,只需将每个DNS域组件转换为dc=属性(例如,从您自己的示例中转换为dc=mydomain,dc=co,dc=uk)。

(同样的方法并不能保证适用于其他LDAP目录,但是,因为根本不要求目录使用dc=作为基本条目—例如,使用o=Example Inc.作为基本条目是完全有效的—因此您应该始终查看rootDSE以确保正确。)

app.config['LDAP_USER_DN'] = 'ou=users'

"附加到基本DN">高度取决于每个目录的管理方式。你必须查看目录的内容(例如,通过Apache directory Studio或至少通过dsa.msc)来了解布局。

目录也可能没有包含所有用户的单一公共分支,并且在根DN下直接创建多个ou或其他容器。在这种情况下,告诉Flask不要在这里添加,并在整个目录中执行用户搜索。

组也是如此;它们可能在一根树枝下,也可能分散在各处。

app.config['LDAP_USER_RDN_ATTR'] = 'cn'

"RDN"表示DN最左边的组成部分(如DC=adDC=ad,DC=example,DC=com的RDN)。ldap上用户架构的RDN属性;通常是CNuid,并且在整个目录中通常是相同的,因此您可以通过查看您自己的用户帐户的LDAP条目的DN来确定它。(在Active Directory中,它实际上总是cn)

最新更新