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