性能
LDAPBackend
在设计上尽量避免每次请求都访问LDAP服务器,当然这依赖于你如何进行配置。如果你比较注重阻塞或延迟问题,这有一些小建议减小它们的影响:
- 缓存组信息:如果
AUTH_LDAP_FIND_GROUP_PERMS
被设置成True
,则默认情况下每次请求都会重载用户的组信息,这是最安全的选择,当用户的所属组信息被改变时会立即生效,但开销比价大。如果可能的话,设置AUTH_LDAP_CACHE_GROUPS
为True
来禁用这种特性。另外你可以考虑使用AUTH_LDAP_MIRROR_GROUPS
和ModelBackend
来支持组权限设置。 - 不要使用
user.ldap_user.*
:这些属性仅仅在per-request请求时被缓存,如果可以传递LDAP属性给User或profile对象,它们仅仅在登录时候被更新。user.ldap_user.attrs
在每次接受请求时都会触发与LDAP的链接。如果你没使用AUTH_LDAP_USER_DN_TEMPLATE
,那么user.ldap_user.dn
也将触发与LDAP的链接。 - 使用简单的组类型:某些分组机制比其他的机制开销更大。这常常超出你的控制,但一定注意比如
NestedGroupOfNamesType
这类复杂的组类型所提供的功能并不是免费的,这些功能通常会生成更大量、更复杂的LDAP查询。 - 使用直接绑定:使用
AUTH_LDAP_USER_DN_TEMPLATE
比AUTH_LDAP_USER_SEARCH
更有效率。特别是存在2台LDAP的服务的登录操作时(一代用于绑定,一台用于查询)。