Add validate_remote_user setting to check proxied users are known
This commit is contained in:
		| @@ -1,3 +1,9 @@ | ||||
| 2.034001 | ||||
|  | ||||
|   [NEW FEATURES] | ||||
|  | ||||
|   * Add validate_remote_user setting to check proxied users are known | ||||
|  | ||||
| 2.034000 - 2016-10-03 | ||||
|  | ||||
|   [NEW FEATURES] | ||||
|   | ||||
| @@ -162,6 +162,19 @@ to Netdisco in the C<X-REMOTE_USER> HTTP Header. For example with Apache: | ||||
| When running securely (https), replace C<< "%{REMOTE_USER}e" >> with C<< | ||||
| "%{REMOTE_USER}s" >>. | ||||
|  | ||||
| =head3 C<validate_remote_user> | ||||
|  | ||||
| Value: Boolean. Default: C<false>. | ||||
|  | ||||
| Enable this to check that remote users (usernames that come from a frontend | ||||
| proxy server) also exist in the Netdisco Users database. No password check is | ||||
| made. | ||||
|  | ||||
| This can be useful when you have web login or single sign-on on the frontend | ||||
| web server, but also want to limit to a set of known users in Netdisco. You | ||||
| can still load those users into the database in Netdisco and enable this | ||||
| setting to check any proxied access can be mapped to a known user. | ||||
|  | ||||
| =head3 C<ldap> | ||||
|  | ||||
| Value: Settings Tree. Default: None. | ||||
|   | ||||
| @@ -42,7 +42,8 @@ sub get_user_details { | ||||
|  | ||||
|     # each of these settings permits no user in the database | ||||
|     # so create a pseudo user entry instead | ||||
|     if (not $user and (setting('trust_remote_user') | ||||
|     if (not $user and not setting('validate_remote_user') | ||||
|                   and (setting('trust_remote_user') | ||||
|                     or setting('trust_x_remote_user') | ||||
|                     or setting('no_auth'))) { | ||||
|         $user = $database->resultset($users_table) | ||||
|   | ||||
| @@ -8,12 +8,18 @@ hook 'before' => sub { | ||||
|     params->{return_url} ||= ((request->path ne uri_for('/')->path) | ||||
|       ? request->uri : uri_for('/inventory')->path); | ||||
|  | ||||
|     # from the internals of Dancer::Plugin::Auth::Extensible | ||||
|     my $provider = Dancer::Plugin::Auth::Extensible::auth_provider('users'); | ||||
|  | ||||
|     if (! session('logged_in_user') && request->path ne uri_for('/login')->path) { | ||||
|         if (setting('trust_x_remote_user') | ||||
|           and scalar request->header('X-REMOTE_USER') | ||||
|           and length scalar request->header('X-REMOTE_USER')) { | ||||
|  | ||||
|             (my $user = scalar request->header('X-REMOTE_USER')) =~ s/@[^@]*$//; | ||||
|             return if setting('validate_remote_user') | ||||
|               and not $provider->get_user_details($user); | ||||
|  | ||||
|             session(logged_in_user => $user); | ||||
|             session(logged_in_user_realm => 'users'); | ||||
|         } | ||||
| @@ -22,6 +28,9 @@ hook 'before' => sub { | ||||
|           and length  $ENV{REMOTE_USER}) { | ||||
|  | ||||
|             (my $user = $ENV{REMOTE_USER}) =~ s/@[^@]*$//; | ||||
|             return if setting('validate_remote_user') | ||||
|               and not $provider->get_user_details($user); | ||||
|  | ||||
|             session(logged_in_user => $user); | ||||
|             session(logged_in_user_realm => 'users'); | ||||
|         } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user