powershell SAML AuthnRequest 例

PowerShellカテゴリを表すパンダのイラスト PowerShell

この記事では、PowerShellを使用してSAML 2.0のAuthnRequest(認証要求)XMLを動的に構築し、Base64エンコードした上でIdPへ送信するサンプルスクリプトと手順について解説します。

想定環境・前提条件

  • Windows PowerShell 5.1 または PowerShell 7以降
  • SAML 2.0に対応するIdP(Identity Provider)およびSP(Service Provider)の環境設定情報

SAMLメッセージの概要

SAML(Security Assertion Markup Language)認証で使用される主要なメッセージには、以下のようなものがあります。

  • AuthnRequest:認証要求を表すメッセージで、ユーザーがアプリケーションにアクセスするときに最初に送信されます。
  • Response:IdPからSPに送信される、認証の成功または失敗に応じた応答メッセージです。
  • LogoutRequest:ユーザーのログアウト要求を表すメッセージです。
  • LogoutResponse:ログアウト要求に対する応答メッセージです。

PowerShellによるAuthnRequest構築・送信スクリプト

以下は、AuthnRequestのXMLを組み立て、Base64エンコードしたうえでHTTP POSTリクエストを送信する最小限の実行例です。

# SAML AuthnRequestメッセージのXMLを構築する関数
function Build-SamlAuthnRequestXml {
  param(
    [Parameter(Mandatory=$true)]
    [string]$issuer,

    [Parameter(Mandatory=$true)]
    [string]$assertionConsumerService,

    [Parameter(Mandatory=$true)]
    [string]$destination
  );

  $id = [System.Guid]::NewGuid().ToString();
  $issueInstant = (Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ");

  $requestXml = @"
<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" 
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" 
ID="$id" 
Version="2.0" 
IssueInstant="$issueInstant" 
AssertionConsumerServiceURL="$assertionConsumerService" 
Destination="$destination" 
ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" 
Issuer="$issuer">
<saml:Issuer>$issuer</saml:Issuer>
</samlp:AuthnRequest>
"@;

  return $requestXml;
}

# 接続先情報の定義
$issuer = "https://example.com/sp";
$assertionConsumerService = "https://example.com/sp/acs";
$destination = "https://example.idp.com/sso/saml2";

# XMLの構築
$requestXml = Build-SamlAuthnRequestXml -issuer $issuer -assertionConsumerService $assertionConsumerService -destination $destination;

# Base64エンコード
$requestBase64 = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($requestXml));

# HTTP POST送信の実行例
$response = Invoke-WebRequest -Uri $destination -Method POST -Body @{ "SAMLRequest" = $requestBase64 };
Write-Output $response.StatusCode;

期待される結果

正常にリクエストが送信された場合、IdP側で認証画面が起動するか、ステータスコード 200 などの応答が返されます。環境に応じて証明書の検証や署名(Signature)の付与が必要になる点にご注意ください。

この記事の更新履歴

この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。

2026年9月12日

  • 変更画面上で正しくコードや見出しが表示されるように全体の見出し構造とコードブロックを修正しました。
  • 追加この記事でできること、前提条件、実行手順、期待される出力を追加しました。

文書情報

記事タイトル
powershell SAML AuthnRequest 例
作成日
更新日
Source URL
https://papanda925.com/?p=2501

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

タイトルとURLをコピーしました