[pve-devel] [PATCH] [PATCH pve-http-server] SSO feature: login with SAMLv2
Julien BLAIS
webmaster at jbsky.fr
Thu May 27 23:55:13 CEST 2021
Add a formatted page that allows redirection.
For performance reasons, a raw format is used instead of a redirection initiated by the HTTP header.
/!\ Modification of the redirection URL for the /access/ticket endpoint.
Signed-off-by: Julien BLAIS <webmaster at jbsky.fr>
---
src/PVE/APIServer/Formatter/HTML.pm | 25 ++++++++++++++++++++++++-
1 file changed, 24 insertions(+), 1 deletion(-)
diff --git a/src/PVE/APIServer/Formatter/HTML.pm b/src/PVE/APIServer/Formatter/HTML.pm
index 743d0ad..3a90aa8 100644
--- a/src/PVE/APIServer/Formatter/HTML.pm
+++ b/src/PVE/APIServer/Formatter/HTML.pm
@@ -277,7 +277,7 @@ PVE::APIServer::Formatter::register_page_formatter(
my $cookie = PVE::APIServer::Formatter::create_auth_cookie(
$data->{ticket}, $config->{cookie_name});
- my $headers = HTTP::Headers->new(Location => $get_portal_base_url->($config),
+ my $headers = HTTP::Headers->new(Location => '/',
'Set-Cookie' => $cookie);
return HTTP::Response->new(301, "Moved", $headers);
}
@@ -293,4 +293,27 @@ PVE::APIServer::Formatter::register_page_formatter(
return ($raw, $portal_ct);
});
+PVE::APIServer::Formatter::register_page_formatter(
+ 'format' => $portal_format,
+ method => 'GET',
+ path => "/access/saml",
+ code => sub {
+ my ($res, $data, $param, $path, $auth, $config) = @_;
+
+ # Get realm from cookie, see TODO part in POST /access/ticket
+ my $cookie = PVE::APIServer::Formatter::create_auth_cookie(
+ $data->{realm}, 'realm');
+
+ my $page = qq[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ <html>
+ <body>
+ <script type="text/javascript">if ('$data->{url}' != '') window.location.href='$data->{url}';</script>
+ </body>
+ </html>
+ ];
+ my $headers = HTTP::Headers->new('Set-Cookie' => $cookie);
+ return HTTP::Response->new(200, "Moved", $headers, $page);
+
+ });
+
1;
--
2.20.1
More information about the pve-devel
mailing list