NAME
WWW::Suffit::Plugin::BasicAuth - The Mojolicious Plugin for HTTP basic authentication and authorization
SYNOPSIS
# in your startup
$self
->plugin(
'WWW::Suffit::Plugin::BasicAuth'
, {
realm
=>
"Strict Zone"
,
authn_fail_render
=> {
status
=> 401,
json
=> {
status
=> 0,
message
=>
"Basic authentication required!"
,
},
},
authz_fail_render
=> {
status
=> 403,
json
=> {
status
=> 0,
message
=>
"Forbidden!"
,
},
},
});
# in your routes
sub
index
{
my
$self
=
shift
;
# Basic authentication
return
unless
$self
->is_basic_authenticated({
render_by_fail
=> 1 });
# Basic Authorization
return
unless
$self
->is_basic_authorized({
render_by_fail
=> 1 });
$self
->render(...);
}
# or as condition in your startup
$self
->routes->get(
'/info'
)->requires(
basic_authenticated
=> 1,
basic_authorized
=> 1)
->to(
'alpha#info'
);
# or bridged in your startup
my
$auth
=
$self
->routes->under(
sub
{
my
$self
=
shift
;
# Basic authentication
return
unless
$self
->is_basic_authenticated({
render_by_fail
=> 1 });
# Basic Authorization
return
unless
$self
->is_basic_authorized({
render_by_fail
=> 1 });
return
1;
});
$auth
->get(
'/info'
)->to(
'alpha#info'
);
DESCRIPTION
The Mojolicious Plugin for HTTP basic authentication and authorization
This plugin based on NoRFC::Server::Auth
OPTIONS
This plugin supports the following options
authn
Authentication checker callback
$self
->plugin(
'WWW::Suffit::Plugin::BasicAuth'
, {
authn
=>
sub
{
my
(
$controller
,
$realm
,
$username
,
$password
,
$params
) =
@_
;
# ...
return
1;
# or 0 on fail
}});
The $params holds options from "is_basic_authenticated" call directly
authz
Authorization checker callback
$self
->plugin(
'WWW::Suffit::Plugin::BasicAuth'
, {
authz
=>
sub
{
my
(
$controller
,
$params
) =
@_
;
# ...
return
1;
# or 0 on fail
}});
The $params holds options from "is_basic_authorized" call directly
authn_fail_render
Defines what is to be rendered when the authenticated condition is not met
Set to a coderef which will be called with the following signature:
sub
{
my
$controller
=
shift
;
my
$realm
=
shift
;
my
$resp
=
shift
;
# See authn_fail_render
...
return
$hashref
;
}
The return value of the subroutine will be ignored if it evaluates to false. If it returns a hash reference, it will be dereferenced and passed as-is to the controller's render
function
If set directly to a hash reference, that will be passed to render
instead
authz_fail_render
Defines what is to be rendered when the authorized condition is not met
Set to a coderef which will be called with the following signature:
sub
{
my
$controller
=
shift
;
my
$resp
=
shift
;
# See authz_fail_render
...
return
$hashref
;
}
See also "authn_fail_render"
realm
$self
->plugin(
'WWW::Suffit::Plugin::BasicAuth'
, {
realm
=>
'My Castle!'
});
HTTP Realm, defaults to 'Strict Zone'
HELPERS
is_basic_authenticated
This helper performs credential validation and checks the authentication status
my
$authenticated
=
$self
->is_basic_authenticated;
my
$authenticated
=
$self
->is_basic_authenticated({
render_by_fail
=> 1,
authn
=>
sub
{
my
(
$c
,
$in_realm
,
$in_user
,
$in_pass
,
$params
) =
@_
;
return
0
unless
$in_user
;
return
secure_compare(
$in_pass
,
"mypass"
) ? 1 : 0;
},
fail_render
=> {
json
=> {
message
=>
"Basic authentication required!"
,
},
status
=> 401,
},
});
- render_by_fail
-
It enables rendering the fail response. See "authn_fail_render"
- authn
-
It defines code of authentication
- fail_render
-
It is render parameters as "authn_fail_render"
is_basic_authorized
This helper checks the authorization status
my
$authorized
=
$self
->is_basic_authorized;
my
$authorized
=
$self
->is_basic_authorized({
render_by_fail
=> 1,
authz
=>
sub
{
my
(
$c
,
$params
) =
@_
;
return
1;
# Basic authorization tsatus
},
fail_render
=> {
json
=> {
message
=>
"Forbidden!"
,
},
status
=> 403,
},
});
- render_by_fail
-
It enables rendering the fail response. See "authz_fail_render"
- authz
-
It defines code of authorization
- fail_render
-
It is render parameters as "authz_fail_render"
METHODS
Internal methods
register
This method register the plugin and helpers in Mojolicious application.
EXAMPLES
Examples of using
ROUTING VIA CONDITION
This plugin exports a routing condition you can use in order to limit access to certain documents to only authenticated users.
$self
->routes->get(
'/info'
)->requires(
basic_authenticated
=> 1,
basic_authorized
=> 1)
->to(
'alpha#info'
);
Prior to Mojolicious 9, use "over" instead of "requires."
ROUTING VIA CALLBACK
If you want to be able to send people to a login page, you will have to use the following:
sub
index
{
my
$self
=
shift
;
$self
->redirect_to(
'/login'
) and
return
0
unless
(
$self
->is_basic_authenticated &&
$self
->is_basic_authorized);
$self
->render(...);
}
ROUTING VIA BRIDGE
my
$auth
=
$self
->routes->under(
sub
{
my
$self
=
shift
;
# Authentication
return
unless
$self
->is_basic_authenticated({
render_by_fail
=> 1
});
# Authorization
return
unless
$self
->is_basic_authorized({
render_by_fail
=> 1
});
return
1;
});
$auth
->get(
'/info'
)->to(
'alpha#info'
);
SEE ALSO
Mojolicious, NoRFC::Server::Auth, Mojolicious::Plugin::Authentication, Mojolicious::Plugin::Authorization, Mojolicious::Plugin::BasicAuth, Mojolicious::Plugin::HttpBasicAuth
AUTHOR
Serż Minus (Sergey Lepenkov) https://www.serzik.com <abalama@cpan.org>
COPYRIGHT
Copyright (C) 1998-2023 D&D Corporation. All Rights Reserved
LICENSE
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
See LICENSE
file and https://dev.perl.org/licenses/