The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Plack::Middleware::Auth::OAuth2 - Plack OAuth2 middleware.

SYNOPSIS

 use Plack::Builder;
 use Plack::App::Env;
 use Plack::App::Login;

 my $app = Plack::App::Env->new;
 builder {
         enable 'Session';
         enable 'Auth::OAuth2',
                'client_id' => '__CLIENT_ID__',
                'client_secret => '__CLIENT_SECRET__',
                'app_login' => Plack::App::Login->new,
                'app_login_url' => sub { $_[0]->login_link($_[1]); },
                'logout_path' => 'logout',
                'provider' => 'Google',
                'redirect_path' => 'code',
                'scope' => 'email',
         ;
         $app;
 };

DESCRIPTION

This middleware provides OAuth2 authentication for web application. Uses LWP::Authen::OAuth2 for implementation.

Prerequisity is use of Plack session management and result is saved to session.

ACCESSORS

app_login

Plack application to login.

It's required.

app_login_url

Callback to set URL from OAuth2 provider to app_login() Plack application.

First argument is app_login() application. Second argument is $url variable from OAuth2 provider.

It's required.

client_id

OAuth2 client id.

It's required.

client_secret

OAuth2 client secret.

It's required.

logout_path

Logout path for creating of endpoint, which logout from OAuth2.

Default value is 'logout' (/logout).

lwp_user_agent

Explicit LWP::UserAgent instance.

Default value is LWP::UserAgent instance inside of LWP::Authen::OAuth2.

redirect_path

Redirect path for creating of endpoint, which is created for service provider use to set authentication.

It's required.

scope

OAuth2 scopes in string.

Requirement is defined by provider. It's optional.

service_provider

Service provider.

Possible providers:

Dwolla

Via module LWP::Authen::OAuth2::ServiceProvider::Dwolla.

Google

Via module LWP::Authen::OAuth2::ServiceProvider::Google.

Line

Via module LWP::Authen::OAuth2::ServiceProvider::Line.

MediaWiki

Via module LWP::Authen::OAuth2::ServiceProvider::MediaWiki.

Strava

Via module LWP::Authen::OAuth2::ServiceProvider::Strava.

Wikimedia

Via module LWP::Authen::OAuth2::ServiceProvider::Wikimedia.

Withings

Via module LWP::Authen::OAuth2::ServiceProvider::Withings.

Yahoo

Via module LWP::Authen::OAuth2::ServiceProvider::Yahoo.

ENDPOINTS

Logout

Logout endpoint is defined inside of this module by setting logout_path (/__LOGOUT_PATH__).

Redirect

Redirect endpoint is defined inside of this module by setting redirect_path (/__REDIRECT_PATH__).

SESSION VARIABLES

oauth2.obj

Value is instance of LWP::Authen::OAuth2 used for authentization.

oauth2.service_provider

Value is authenticated service provider.

oauth2.token_string

Value is token string.

ERRORS

 prepare_app():
         No OAuth2 'client_id' setting.
         No OAuth2 'client_secret' setting.
         No login application.
         No login url call.
         No redirect path.
         No service provider.

DEPENDENCIES

English, Error::Pure, JSON::XS, LWP::Authen::OAuth2, Plack::Middleware, Plack::Response, Plack::Session, Plack::Util::Accessor.

SEE ALSO

LWP::Authen::OAuth2

Make requests to OAuth2 APIs.

REPOSITORY

https://github.com/michal-josef-spacek/Plack-Middleware-Auth-OAuth2

AUTHOR

Michal Josef Špaček mailto:skim@cpan.org

http://skim.cz

LICENSE AND COPYRIGHT

© 2020-2022 Michal Josef Špaček

BSD 2-Clause License

VERSION

0.01