Catalyst-Plugin-OpenIDConnect
view release on metacpan or search on metacpan
DEPLOYMENT.md view on Meta::CPAN
</Plugin::Session>
```
### 4. Create the OpenIDConnect Controller
Create `lib/MyApp/Controller/OpenIDConnect.pm` in your application:
```perl
package MyApp::Controller::OpenIDConnect;
use Moose;
use namespace::autoclean;
BEGIN { extends 'Catalyst::Plugin::OpenIDConnect::Controller::Root' }
__PACKAGE__->meta->make_immutable;
1;
```
Then load it in your main app module before setup:
```perl
package MyApp;
use Catalyst qw/
OpenIDConnect
Session
Session::Store::File
Session::State::Cookie
/;
# Load the controller before setup
use MyApp::Controller::OpenIDConnect;
```
## HTTPS Configuration
HTTPS is mandatory for production deployments.
### Using Nginx as Reverse Proxy
```nginx
server {
listen 443 ssl http2;
server_name auth.example.com;
ssl_certificate /etc/ssl/certs/your-cert.crt;
ssl_certificate_key /etc/ssl/private/your-key.key;
# Security headers
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "DENY" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
location / {
proxy_pass http://catalyst:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
}
}
# Force HTTPS
server {
listen 80;
server_name auth.example.com;
return 301 https://$server_name$request_uri;
}
```
### Using Apache as Reverse Proxy
```apache
<VirtualHost *:443>
ServerName auth.example.com
SSLEngine on
SSLCertificateFile /etc/ssl/certs/your-cert.crt
SSLCertificateKeyFile /etc/ssl/private/your-key.key
# Security headers
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "DENY"
Header always set X-XSS-Protection "1; mode=block"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
ProxyPreserveHost On
ProxyPass / http://catalyst:5000/
ProxyPassReverse / http://catalyst:5000/
</VirtualHost>
# Force HTTPS
<VirtualHost *:80>
ServerName auth.example.com
Redirect permanent / https://auth.example.com/
</VirtualHost>
```
## Database Integration
### PostgreSQL Example
```perl
package MyApp::Model::OIDC;
use Moose;
extends 'Catalyst::Plugin::OpenIDConnect::Utils::Store';
has dbic => (
is => 'ro',
isa => 'Catalyst::Model::DBIC::Schema',
);
sub create_authorization_code {
my ($self, $client_id, $user, $scope, $redirect_uri, $nonce) = @_;
my $code = $self->_generate_secure_code();
( run in 0.497 second using v1.01-cache-2.11-cpan-13bb782fe5a )