|   | 275 | === Authentication for tracd behind a proxy | 
          
          
            |   | 276 | It is convenient to provide central external authentication to your tracd instances, instead of using {{{--basic-auth}}}. There is some discussion about this in #9206. | 
          
          
            |   | 277 |  | 
          
          
            |   | 278 | Below is example configuration based on Apache 2.2, mod_proxy, mod_authnz_ldap. | 
          
          
            |   | 279 |  | 
          
          
            |   | 280 | First we bring tracd into Apache's location namespace. | 
          
          
            |   | 281 |  | 
          
          
            |   | 282 | {{{ | 
          
          
            |   | 283 | <Location /project/proxified> | 
          
          
            |   | 284 |         Require ldap-group cn=somegroup, ou=Groups,dc=domain.com | 
          
          
            |   | 285 |         Require ldap-user somespecificusertoo | 
          
          
            |   | 286 |         ProxyPass http://localhost:8101/project/proxified/ | 
          
          
            |   | 287 |         # Turns out we don't really need complicated RewriteRules here at all | 
          
          
            |   | 288 |         RequestHeader set REMOTE_USER %{REMOTE_USER}s | 
          
          
            |   | 289 | </Location> | 
          
          
            |   | 290 | }}} | 
          
          
            |   | 291 |  | 
          
          
            |   | 292 | Then we need a single file plugin to recognize HTTP_REMOTE_USER header as valid authentication source. HTTP headers like '''HTTP_FOO_BAR''' will get converted to '''Foo-Bar''' during processing. Name it something like '''remote-user-auth.py''' and drop it into '''proxified/plugins''' directory: | 
          
          
            |   | 293 | {{{ | 
          
          
            |   | 294 | #!python | 
          
          
            |   | 295 | from trac.core import * | 
          
          
            |   | 296 | from trac.config import BoolOption | 
          
          
            |   | 297 | from trac.web.api import IAuthenticator | 
          
          
            |   | 298 |  | 
          
          
            |   | 299 | class MyRemoteUserAuthenticator(Component): | 
          
          
            |   | 300 |  | 
          
          
            |   | 301 |     implements(IAuthenticator) | 
          
          
            |   | 302 |  | 
          
          
            |   | 303 |     obey_remote_user_header = BoolOption('trac', 'obey_remote_user_header', 'false',  | 
          
          
            |   | 304 |                """Whether the 'Remote-User:' HTTP header is to be trusted for user logins  | 
          
          
            |   | 305 |                 (''since ??.??').""")  | 
          
          
            |   | 306 |  | 
          
          
            |   | 307 |     def authenticate(self, req): | 
          
          
            |   | 308 |         if self.obey_remote_user_header and req.get_header('Remote-User'):  | 
          
          
            |   | 309 |             return req.get_header('Remote-User')  | 
          
          
            |   | 310 |         return None | 
          
          
            |   | 311 |  | 
          
          
            |   | 312 | }}} | 
          
          
            |   | 313 |  | 
          
          
            |   | 314 | Add this new parameter to your TracIni: | 
          
          
            |   | 315 | {{{ | 
          
          
            |   | 316 | ... | 
          
          
            |   | 317 | [trac] | 
          
          
            |   | 318 | ... | 
          
          
            |   | 319 | obey_remote_user_header = true | 
          
          
            |   | 320 | ... | 
          
          
            |   | 321 | }}} | 
          
          
            |   | 322 |  | 
          
          
            |   | 323 | Run tracd: | 
          
          
            |   | 324 | {{{ | 
          
          
            |   | 325 | tracd -p 8101 -r -s proxified --base-path=/project/proxified | 
          
          
            |   | 326 | }}} | 
          
          
            |   | 327 |  |