mirror of
https://github.com/BookStackApp/BookStack.git
synced 2026-02-05 00:29:48 +03:00
v0.23.2 // (AD) LDAP & "Default user role"... also, multiple ldap_user_filter entries? #785
Closed
opened 2026-02-04 22:17:00 +03:00 by OVERLORD
·
5 comments
No Branch/Tag Specified
development
l10n_development
further_theme_development
release
llm_only
vectors
v25-11
docker_env
drawio_rendering
user_permissions
ldap_host_failover
svg_image
prosemirror
captcha_example
fix/video-export
v25.12.3
v25.12.2
v25.12.1
v25.12
v25.11.6
v25.11.5
v25.11.4
v24.11.4
v25.11.3
v25.11.2
v25.11.1
v25.11
v25.07.3
v25.07.2
v25.07.1
v25.07
v25.05.2
v25.05.1
v25.05
v25.02.5
v25.02.4
v25.02.3
v25.02.2
v25.02.1
v25.02
v24.12.1
v24.12
v24.10.3
v24.10.2
v24.10.1
v24.10
v24.05.4
v24.05.3
v24.05.2
v24.05.1
v24.05
v24.02.3
v24.02.2
v24.02.1
v24.02
v23.12.3
v23.12.2
v23.12.1
v23.12
v23.10.4
v23.10.3
v23.10.2
v23.10.1
v23.10
v23.08.3
v23.08.2
v23.08.1
v23.08
v23.06.2
v23.06.1
v23.06
v23.05.2
v23.05.1
v23.05
v23.02.3
v23.02.2
v23.02.1
v23.02
v23.01.1
v23.01
v22.11.1
v22.11
v22.10.2
v22.10.1
v22.10
v22.09.1
v22.09
v22.07.3
v22.07.2
v22.07.1
v22.07
v22.06.2
v22.06.1
v22.06
v22.04.2
v22.04.1
v22.04
v22.03.1
v22.03
v22.02.3
v22.02.2
v22.02.1
v22.02
v21.12.5
v21.12.4
v21.12.3
v21.12.2
v21.12.1
v21.12
v21.11.3
v21.11.2
v21.11.1
v21.11
v21.10.3
v21.10.2
v21.10.1
v21.10
v21.08.6
v21.08.5
v21.08.4
v21.08.3
v21.08.2
v21.08.1
v21.08
v21.05.4
v21.05.3
v21.05.2
v21.05.1
v21.05
v21.04.6
v21.04.5
v21.04.4
v21.04.3
v21.04.2
v21.04.1
v21.04
v0.31.8
v0.31.7
v0.31.6
v0.31.5
v0.31.4
v0.31.3
v0.31.2
v0.31.1
v0.31.0
v0.30.7
v0.30.6
v0.30.5
v0.30.4
v0.30.3
v0.30.2
v0.30.1
v0.30.0
v0.29.3
v0.29.2
v0.29.1
v0.29.0
v0.28.3
v0.28.2
v0.28.1
v0.28.0
v0.27.5
v0.27.4
v0.27.3
v0.27.2
v0.27.1
v0.27
v0.26.4
v0.26.3
v0.26.2
v0.26.1
v0.26.0
v0.25.5
v0.25.4
v0.25.3
v0.25.2
v0.25.1
v0.25.0
v0.24.3
v0.24.2
v0.24.1
v0.24.0
v0.23.2
v0.23.1
v0.23.0
v0.22.0
v0.21.0
v0.20.3
v0.20.2
v0.20.1
v0.20.0
v0.19.0
v0.18.5
v0.18.4
v0.18.3
v0.18.2
v0.18.1
v0.18.0
v0.17.4
v0.17.3
v0.17.2
v0.17.1
v0.17.0
v0.16.3
v0.16.2
v0.16.1
v0.16.0
v0.15.3
v0.15.2
v0.15.1
v0.15.0
v0.14.3
v0.14.2
v0.14.1
v0.14.0
v0.13.1
v0.13.0
v0.12.2
v0.12.1
v0.12.0
v0.11.2
v0.11.1
v0.11.0
v0.10.0
v0.9.3
v0.9.2
v0.9.1
v0.9.0
v0.8.2
v0.8.1
v0.8.0
v0.7.6
v0.7.5
v0.7.4
v0.7.3
0.7.2
v.0.7.1
v0.7.0
v0.6.3
v0.6.2
v0.6.1
v0.6.0
v0.5.0
Labels
Clear labels
🎨 Design
📖 Docs Update
🐛 Bug
🐛 Bug
:cat2:🐈 Possible duplicate
💿 Database
☕ Open to discussion
💻 Front-End
🐕 Support
🚪 Authentication
🌍 Translations
🔌 API Task
🏭 Back-End
⛲ Upstream
🔨 Feature Request
🛠️ Enhancement
🛠️ Enhancement
🛠️ Enhancement
❤️ Happy feedback
🔒 Security
🔍 Pending Validation
💆 UX
📝 WYSIWYG Editor
🌔 Out of scope
🔩 API Request
:octocat: Admin/Meta
🖌️ View Customization
❓ Question
🚀 Priority
🛡️ Blocked
🚚 Export System
♿ A11y
🔧 Maintenance
> Markdown Editor
No Label
❓ Question
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/BookStack#785
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @derek-shnosh on GitHub (Aug 20, 2018).
Disclosure
I wasn't sure how to submit this, as a request or as a bug, so please flag accordingly. I have concerns/questions regarding using LDAP integration with AD. I may have overlooked something that's just not registering with me right now because my head is so deep in the weeds.
Goal
Match user roles to security groups without manually entering them in the admin UI. If the LDAP user is not a member of a group name matching any of the roles, then login should not be permitted.
Meat n' Potatoes
I'm not sure if this is more a BookStack concern or a MSFT concern, but are groups supported in the
ldap_user_filterentries?I see that adding users individually to the
ldap_user_filteris supported, per @ssddanbrown's comment on issue #971 (reference).Based on based on this, I don't think its an MSFT concern since we're running Server 2016 in our environment (domain function level 2012).
Observation
ldap_user_filterentries.ldap_user_filterentries exist.Example
If the default role is configured to Docs_Public and a user in the group Docs_Viewer logs in for the first time, they are incorrectly assigned the Docs_Public role.
Validation
Result
Configuration Details
File
/.envNotes
ldap_user_filterto use(objectClass=user)instead of(sAMAccountName=${user}), but then I can't even complete the first login.LDAP_USER_FILTERstring, the end result is the same.@derek-shnosh commented on GitHub (Aug 21, 2018):
Looked at this again with a semi-clear head and thought the
LDAP_REMOVE_FROM_GROUPSconfiguration set totruemight accomplish what I want to do.I turned that option on and tried to log into an LDAP user who had already been assigned the
Docs_Adminrole via LDAP match (the same user I've been using to admin thus far).I then tried to log into a new LDAP (added to the
Docs_AdminAD group).I set the
AUTH_METHOD=standardand logged in with a local user and was able to confirm both LDAP matched accounts were now assigned theDocs_Publicrole.I re-ran the
ldapsearchagain (each time) for good measure and theDocs_Admingroup was returned successfully.Maybe this is a bug? or my head isn't as clear as I thought it was and I'm still missing something.
@derek-shnosh commented on GitHub (Aug 21, 2018):
I took one last stab and added the DN for the
Docs_AdminAD group to theDocs_Adminrole under External Authentication IDs:CN=docs_admin,OU=security,OU=groups,OU=corp,DC=domain,DC=localI created another test user and was still assigned the
Doc_Publicrole upon first login; as a reminder, theDoc_Publicrole is configured as the Default user role after registration in the app settings.@ssddanbrown commented on GitHub (Sep 23, 2018):
Hi @derek-shnosh, Sorry for the lack of reply. I had missed this issue before so sorry if it's too late.
The above is quite a lot to take in and I'm not really certain what the issue is but hopefully this helps:
Ldap Group Sync Logic with 'remove_from_groups' Enabled
I've bolded the part that may be relevant from reading the above. I think you may just need to set the
External Authentication Idsof the bookstack admin role to bedocs_admininstead of the whole DN.Let me know if that helps or if I've missed the mark.
@derek-shnosh commented on GitHub (Sep 25, 2018):
Thanks for the response @ssddanbrown.
Here is my LDAP_USER_FILTER, and how it is broken down;
LDAP_USER FILTER objects;
sAMAccountName=${user}memberOf=CN=docs_admin,OU=security,OU=groups,OU=corp,DC=domain,DC=localmemberOf=CN=docs_viewer,OU=security,OU=groups,OU=corp,DC=domain,DC=localPer the documentation;
Hopefully I'm interpreting this correctly; i.e. (providing the account was found within any of the groups configured in the
LDAP_USER_FILTERand BookStack was able to bind to the user DN) a user account that is a member of the AD group Docs_Admin should be assigned the BookStack user role Docs_Admin without enteringdocs_adminin the External Authentication ID field; correct?@derek-shnosh commented on GitHub (Sep 25, 2018):
I did some experimenting this morning and have things working.
My interpretation of the LDAP authentication configuration
The
LDAP_USER_FILTERfield defines a CN for users or groups to merely log in to BookStack. They also need to be a member of a security group whose name matches a role configured in BookStack; or the security group CN needs to be configured in the role's External Authentication ID field.My configuration changes
Results
LDAP_REMOVE_FROM_GROUPS=trueset in .env).I am confused as to why my previous configuration didn't work, because my test account was a member of the AD security group Docs_Admin which was defined in my
LDAP_USER_FILTERstring; so theoretically it should have worked. However, I'm not too concerned about it because it's working as desired/intended now, so I'll close this one out.