Catalyst-Plugin-OpenIDConnect
view release on metacpan or search on metacpan
QUICKSTART.md view on Meta::CPAN
# Quick Start Guide
Get started with Catalyst::Plugin::OpenIDConnect in 5 minutes.
## 1. Install
```bash
cd /path/to/catalyst-plugin-openidconnect
cpanm --installdeps .
```
## 2. Generate Keys
```bash
# Generate RSA key pair (2048-bit, suitable for development)
openssl genrsa -out /path/to/private.pem 2048
openssl rsa -in /path/to/private.pem -pubout -out /path/to/public.pem
# Or use the example script
bash example/generate_keys.sh
```
## 3. Configure Your App
Add to your Catalyst application:
```perl
package MyApp;
use Catalyst qw/
OpenIDConnect
Session
Session::Store::File
Session::State::Cookie
/;
__PACKAGE__->config(
'Plugin::OpenIDConnect' => {
issuer => {
url => 'http://localhost:5000',
private_key_file => '/path/to/private.pem',
public_key_file => '/path/to/public.pem',
key_id => 'my-key-1',
},
clients => {
'my-client' => {
client_secret => 'my-secret',
redirect_uris => ['http://localhost:3000/callback'],
post_logout_redirect_uris => ['http://localhost:3000/logged-out'],
},
},
},
);
# Load the OpenIDConnect controller before setup
use MyApp::Controller::OpenIDConnect;
__PACKAGE__->setup;
```
## 3a. Create the OpenIDConnect Controller
The plugin requires you to create a controller that extends the plugin's controller.
Create `lib/MyApp/Controller/OpenIDConnect.pm`:
```perl
package MyApp::Controller::OpenIDConnect;
use Moose;
use namespace::autoclean;
BEGIN { extends 'Catalyst::Plugin::OpenIDConnect::Controller::Root' }
__PACKAGE__->meta->make_immutable;
1;
```
This allows Catalyst to properly discover and register all OpenIDConnect routes.
## 3b. Create a Login Action
Your app must have a login action that handles the `back` parameter. The plugin redirects unauthenticated users to your login page, which should redirect back to complete the authentication flow:
```perl
package MyApp::Controller::Auth;
use Moose;
use namespace::autoclean;
BEGIN { extends 'Catalyst::Controller'; }
sub login : Local {
my ( $self, $c ) = @_;
if ( $c->request->method eq 'POST' ) {
my $username = $c->request->params->{username};
# In development, accept any username
if ($username) {
$c->session->{user} = { username => $username, id => $username };
( run in 0.464 second using v1.01-cache-2.11-cpan-13bb782fe5a )