Skip to content

Instantly share code, notes, and snippets.

@jberger
Created November 23, 2020 03:31
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save jberger/a459577c4179ef52c513c5b16423879a to your computer and use it in GitHub Desktop.
Save jberger/a459577c4179ef52c513c5b16423879a to your computer and use it in GitHub Desktop.
use Mojolicious::Lite;
use Mojo::JWT;
use Mojo::URL;
use Mojo::UserAgent;
my $ua = Mojo::UserAgent->new;
my $keycloak = $ua->get('https://keycloak.jberger.pl/auth/realms/master/.well-known/openid-configuration')->result->json;
my $jwkset = $ua->get($keycloak->{jwks_uri})->result->json;
my $jwt = Mojo::JWT->new->add_jwkset($jwkset);
plugin OAuth2 => {
keycloak => {
key => 'convos-demo',
secret => '1f0d676f-b7ea-45c2-bf1c-4c16edd3fa11',
authorize_url => Mojo::URL->new($keycloak->{authorization_endpoint})->query(response_type => 'code'),
token_url => $keycloak->{token_endpoint},
},
};
get "/connect" => sub {
my $c = shift;
my $get_token_args = {
redirect_uri => $c->url_for("connect")->userinfo(undef)->to_abs,
scope => 'openid',
};
$c->oauth2->get_token_p(keycloak => $get_token_args)->then(sub {
return unless my $provider_res = shift; # Redirct to IdP
$c->session(token => $provider_res->{access_token});
my $user = $jwt->decode($provider_res->{id_token});
$c->render(json => $user);
})->catch(sub {
$c->render(text => "Error $_[0]");
});
};
app->start;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment