add Group check support on LDAP Auth.
This commit is contained in:
		
							parent
							
								
									52d5cba3e9
								
							
						
					
					
						commit
						d2d4300d4f
					
				
							
								
								
									
										11
									
								
								README.md
								
								
								
								
							
							
						
						
									
										11
									
								
								README.md
								
								
								
								
							|  | @ -110,7 +110,7 @@ The **nginx-ldap-auth.conf** file enables caching of both data and credentials. | ||||||
| 
 | 
 | ||||||
| <pre>http { | <pre>http { | ||||||
|   ... |   ... | ||||||
|   <strong>#</strong>proxy_cache_path cache/ keys_zone=auth_cache:10m; |   <strong>#</strong>proxy_cache_path cache/ levels=1:2 keys_zone=auth_cache:10m; | ||||||
|   ... |   ... | ||||||
|   server { |   server { | ||||||
|     ... |     ... | ||||||
|  | @ -128,11 +128,20 @@ The **nginx-ldap-auth.conf** file enables caching of both data and credentials. | ||||||
| If you want to change the value for the `template` parameter that the ldap-auth daemon passes to the OpenLDAP server by default, uncomment the following directive as shown, and change the value: | If you want to change the value for the `template` parameter that the ldap-auth daemon passes to the OpenLDAP server by default, uncomment the following directive as shown, and change the value: | ||||||
| 
 | 
 | ||||||
| <pre>proxy_set_header X-Ldap-Template "<strong>(cn=%(username)s)</strong>";</pre> | <pre>proxy_set_header X-Ldap-Template "<strong>(cn=%(username)s)</strong>";</pre> | ||||||
|  | OR | ||||||
|  | <pre>proxy_set_header X-Ldap-Template "<strong>(&(objectClass=posixAccount)(uid=%(username)s))</strong>";</pre> | ||||||
| 
 | 
 | ||||||
| If you want to change the realm name from the default value (**Restricted**), uncomment and change the following directive: | If you want to change the realm name from the default value (**Restricted**), uncomment and change the following directive: | ||||||
| 
 | 
 | ||||||
| <pre>proxy_set_header X-Ldap-Realm "<strong>Restricted</strong>";</pre> | <pre>proxy_set_header X-Ldap-Realm "<strong>Restricted</strong>";</pre> | ||||||
| 
 | 
 | ||||||
|  | If you want to auth user and group - use these `binddn` and `grptemplate` parameters that the ldap-auth daemon passes to the OpenLDAP server by default, uncomment the following directive as shown, and change the value: | ||||||
|  | 
 | ||||||
|  | <pre> | ||||||
|  | proxy_set_header X-Ldap-GroupDN "<strong>cn=mygroupname,ou=group,dc=test,dc=com</strong>"; | ||||||
|  | proxy_set_header X-Ldap-GrpTemplate "<strong>(memberUid=%(username)s)</strong>";</pre> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| ### Authentication Server | ### Authentication Server | ||||||
| 
 | 
 | ||||||
| To modify the ldap-auth daemon to communicate with a different (non-LDAP) type of authentication server, write a new authentication-handler class to replace `LDAPAuthHandler` in the **ngx-ldap-auth-daemon.py** script. | To modify the ldap-auth daemon to communicate with a different (non-LDAP) type of authentication server, write a new authentication-handler class to replace `LDAPAuthHandler` in the **ngx-ldap-auth-daemon.py** script. | ||||||
|  |  | ||||||
|  | @ -3,6 +3,7 @@ | ||||||
| ''''which python  >/dev/null && exec python  "$0" "$@" # ''' | ''''which python  >/dev/null && exec python  "$0" "$@" # ''' | ||||||
| 
 | 
 | ||||||
| # Copyright (C) 2014-2015 Nginx, Inc. | # Copyright (C) 2014-2015 Nginx, Inc. | ||||||
|  | # Add LDAP Group check support by Evgeny Kulev evgeny@kulev.ru 2016. | ||||||
| 
 | 
 | ||||||
| import sys, os, signal, base64, ldap, Cookie | import sys, os, signal, base64, ldap, Cookie | ||||||
| from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler | from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler | ||||||
|  | @ -142,7 +143,9 @@ class LDAPAuthHandler(AuthHandler): | ||||||
|              # parameter      header         default |              # parameter      header         default | ||||||
|              'realm': ('X-Ldap-Realm', 'Restricted'), |              'realm': ('X-Ldap-Realm', 'Restricted'), | ||||||
|              'url': ('X-Ldap-URL', None), |              'url': ('X-Ldap-URL', None), | ||||||
|  |              'groupdn': ('X-Ldap-GroupDN', None), | ||||||
|              'basedn': ('X-Ldap-BaseDN', None), |              'basedn': ('X-Ldap-BaseDN', None), | ||||||
|  |              'grptemplate': ('X-Ldap-GrpTemplate', '(memberUid=%(username)s)'), | ||||||
|              'template': ('X-Ldap-Template', '(cn=%(username)s)'), |              'template': ('X-Ldap-Template', '(cn=%(username)s)'), | ||||||
|              'binddn': ('X-Ldap-BindDN', ''), |              'binddn': ('X-Ldap-BindDN', ''), | ||||||
|              'bindpasswd': ('X-Ldap-BindPass', ''), |              'bindpasswd': ('X-Ldap-BindPass', ''), | ||||||
|  | @ -178,6 +181,25 @@ class LDAPAuthHandler(AuthHandler): | ||||||
|             ctx['action'] = 'binding as search user' |             ctx['action'] = 'binding as search user' | ||||||
|             ldap_obj.bind_s(ctx['binddn'], ctx['bindpasswd'], ldap.AUTH_SIMPLE) |             ldap_obj.bind_s(ctx['binddn'], ctx['bindpasswd'], ldap.AUTH_SIMPLE) | ||||||
| 
 | 
 | ||||||
|  |             if ctx['groupdn']: | ||||||
|  |                 ctx['action'] = 'preparing group search filter' | ||||||
|  |                 grpsearchfilter = ctx['grptemplate'] % { 'username': ctx['user'] } | ||||||
|  | 
 | ||||||
|  |                 self.log_message(('searching on server "%s" with group dn ' + \ | ||||||
|  |                               '"%s" with filter "%s"') % | ||||||
|  |                               (ctx['url'], ctx['groupdn'], grpsearchfilter)) | ||||||
|  | 
 | ||||||
|  |                 ctx['action'] = 'running group search query' | ||||||
|  |                 grpresults = ldap_obj.search_s(ctx['groupdn'], ldap.SCOPE_SUBTREE, | ||||||
|  |                                           grpsearchfilter, ['objectclass'], 1) | ||||||
|  | 
 | ||||||
|  |                 ctx['action'] = 'verifying search query grpresults' | ||||||
|  |                 if len(grpresults) < 1: | ||||||
|  |                     self.auth_failed(ctx, 'no permission to user found in group') | ||||||
|  |                     return | ||||||
|  |                 else: | ||||||
|  |                     self.log_message('Group OK for user "%s"' % (ctx['user'])) | ||||||
|  | 
 | ||||||
|             ctx['action'] = 'preparing search filter' |             ctx['action'] = 'preparing search filter' | ||||||
|             searchfilter = ctx['template'] % { 'username': ctx['user'] } |             searchfilter = ctx['template'] % { 'username': ctx['user'] } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue