シンプルなSAML認証用SPの構築:第二回 PerlとNet::SAML2で作る認証要求送信スクリプト
作成日:2025.06.09
本記事は連載第2回として、前回構築したSPメタデータ生成スクリプトに引き続き、IdP(Identity Provider)への認証要求送信処理の実装方法を解説します。PerlとNet::SAML2モジュールを活用し、SAML 2.0仕様に基づいた認証要求の生成、リダイレクト処理、そしてセッションに認証要求IDを保存する基本的な手法をご紹介します。
ローカル環境で動く、SAML認証によるSSO用の SP(Service Provider) を、シンプルな構成で Perl で実装してみる連載第2回です。
前回は、必要となる Perl モジュールのインストールと、 SP のメタデータを生成するためのスクリプトを作成しました。
今回は IdP(Identity Provider) に対して認証要求を送信するためのスクリプトを作成します。
認証要求の送信スクリプト
IdP に対して認証要求を送信するための Perl スクリプトを authn_request.cgi
という名前で作成します。このスクリプトは、SAML 2.0 の仕様に基づいて認証要求を生成し、IdP にリダイレクトします。
#!/usr/bin/perl
use strict;
use warnings;
use Net::SAML2;
use CGI;
my $cgi = CGI->new;
# 設定
my $sp_key_file = '/path/to/your/sp/key.pem'; # SPの秘密鍵ファイルのパス
my $sp_entity_id = 'https://localhost/perlsp/metadata.cgi'; # SPのエンティティID(かつメタデータのURL)
my $idp_metadata_url = 'https://idp.abe-tatsuya.com/saml/metadata'; # IdPのメタデータURL
my $provider_name = 'TEST SSO'; # SPのプロバイダ名
# IdPのメタデータを読み込む
my $idp = Net::SAML2::IdP->new_from_url(url => $idp_metadata_url);
my $sso_url = $idp->sso_url('urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect');
# 認証リクエスト作成
my $authnreq = Net::SAML2::Protocol::AuthnRequest->new(
issuer => $sp_entity_id,
destination => $sso_url,
provider_name => $provider_name,
);
# 認証リクエストのIDを取得
my $saml_request_id = $authnreq->id;
# 認証リクエストのIDをセッションか何かに保存する処理
&_save_saml_request_id($saml_request_id);
# ここでは、セッションに保存するコードは省略しています。
# HTTP-RedirectバインディングでリダイレクトURLを生成
my $binding = Net::SAML2::Binding::Redirect->new(
key => $sp_key_file,
cert => $idp->cert('signing'),
param => 'SAMLRequest',
url => $sso_url,
);
my $redirect_url = $binding->sign($authnreq->as_xml);
# IdPにリダイレクト
print $cgi->redirect($redirect_url);
このスクリプトは、IdP のメタデータを読み込み、認証要求を生成して IdP の SSO URL にリダイレクトします。認証要求の ID はセッションに保存する必要がありますが、ここではその部分のコードは省略しています。
スクリプトの実行
ブラウザで authn_request.cgi
を実行すると、IdP にリダイレクトされ、認証要求が送信されます。
IdP が正しく設定されていれば、IdP のログイン画面が表示され、ユーザーは認証を行うことができます。
認証が成功すると、IdP は SP の ACS URL にアサーションを送信します。次回は、このアサーションを受け取り、ユーザー情報を取得するためのスクリプトを作成します。
第三回 ACSスクリプトの実装方法
2025.06.12追記

奈良市を拠点に、26年以上の経験を持つフリーランスWebエンジニア、阿部辰也です。
これまで、ECサイトのバックエンド開発や業務効率化システム、公共施設の予約システムなど、多彩なプロジェクトを手がけ、企業様や制作会社様のパートナーとして信頼を築いてまいりました。
【制作会社・企業様向けサポート】
Webシステムの開発やサイト改善でお困りの際は、どうぞお気軽にご相談ください。小さな疑問から大規模プロジェクトまで、最適なご提案を心を込めてさせていただきます。
ぜひ、プロフィールやWeb制作会社様向け業務案内、一般企業様向け業務案内もご覧くださいね。
シンプルなSAML認証用SPの構築:第一回 PerlとNet::SAML2で作るメタデータ生成スクリプト
2025.06.06
PerlとNet::SAML2を利用して、シンプルな構成のSAML認証用SPの構築方法をご紹介します。CPANによるモジュール導入、テスト用の自己署名証明書と秘密鍵の準備方法に触れ、SPのエンティティIDやACS URL、エラーURLといった必要情報を含むメタデータをXML形式で生成するスクリプトの実装例を解説します。
シンプルなSAML認証用SPの構築:第三回 PerlとNet::SAML2で作るACSスクリプト
2025.06.10
連載第3回となる本稿では、PerlとNet::SAML2を用いて、ACS (Assertion Consumer Service) スクリプトの作成方法に焦点を当てます。IdPからのSAMLレスポンスを受信し、アサーションの検証やユーザー属性の取得といった重要な処理を実装する手順を、実際のコード例を交えてわかりやすく紹介。SAML認証の全体像とその実現に必要な知識を身につけるための内容です。
Movable Type システムログ出力ガイド ― MT::App の log メソッドでエラーメッセージを記録する方法
2025.06.03
Movable Type のシステムログにエラーメッセージや各種情報を出力する方法について、MT::App の log メソッドを利用した具体的な実装例を解説します。ログレベル、クラス、カテゴリを指定することにより、出力内容を柔軟に分類・管理できる仕組みを詳述し、管理画面でのログ確認方法やデータベーステーブルでの確認方法も合わせて説明します。
Movable Type プラグインで実現するエラー画面・ログイン画面の出力方法
2025.04.10
Movable Typeプラグイン開発において、エラー画面やログイン画面をどのように出力すべきか、その基本手法を具体的なコード例を交えて解説します。MT::App の show_error および show_login メソッドの利用方法や各オプションの効果を理解することで、プラグインにおけるユーザーインターフェースのカスタマイズが容易になります。