powershell SAML AuthnRequest 例

PowerShell

gptを使ったサンプル、自分の勉強用

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

AuthnRequest:認証要求を表すメッセージで、ユーザーがアプリケーションにアクセスするときに最初に送信されます。
Response:IdP(Identity Provider)からSP(Service Provider)に送信される、認証の成功または失敗に応じた応答メッセージです。
LogoutRequest:ユーザーのログアウト要求を表すメッセージで、ユーザーがアプリケーションからログアウトするときに送信されます。
LogoutResponse:ログアウト要求に対する応答メッセージで、ログアウト処理が成功したかどうかを示します。
ArtifactResolve:SPがIdPから受け取ったアーティファクトを解決するためのメッセージです。
ArtifactResponse:アーティファクトを解決するための要求に対する応答メッセージです。
NameIDMappingRequest:ユーザーの識別子を別の形式に変換するための要求メッセージです。
NameIDMappingResponse:識別子の変換要求に対する応答メッセージです。
上記のメッセージ以外にも、SAML認証で使用されるいくつかの追加メッセージがあります。SAML仕様について詳しくは、OASIS(Organization for the Advancement of Structured Information Standards)の公式ウェブサイトを参照してください。

ここでは「AuthnRequest」のサンプル

# SAML AuthnRequestメッセージのXMLを構築する関数
function Build-SamlAuthnRequestXml {
  param(
    [Parameter(Mandatory=$true)]
    [string]$issuer,  # 自分のエンティティID(SAMLリクエストを送信するSPの識別子)
    [Parameter(Mandatory=$true)]
    [string]$assertionConsumerService,  # SAMLレスポンスを受け取るエンドポイント(通常はSPのACS)
    [Parameter(Mandatory=$true)]
    [string]$destination  # リクエストを送信するIDPのSSOエンドポイント
  )

  # ランダムなIDを生成
  $id = [System.Guid]::NewGuid().ToString()

  # 現在時刻をUTC形式で取得
  $issueInstant = Get-Date -UFormat %Y-%m-%dT%H:%M:%SZ

  # AuthnRequestのXMLを構築
  $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"  # ランダムなID
Version="2.0"  # プロトコルバージョン
IssueInstant="$issueInstant"  # リクエストの発行時刻
AssertionConsumerServiceURL="$assertionConsumerService"  # レスポンスを受け取るエンドポイント
Destination="$destination"  # リクエストを送信するIDPのSSOエンドポイント
ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"  # プロトコルバインディング(通常はHTTP-POST)
Issuer="$issuer">  # リクエストを送信するSPのエンティティID
<saml:Issuer>$issuer</saml:Issuer>  # 同じくエンティティID
</samlp:AuthnRequest>
"@

  return $requestXml
}

# 必要な情報を設定
$issuer = "https://example.com/sp"  # このSPのエンティティID
$assertionConsumerService = "https://example.com/sp/acs"  # レスポンスを受け取るエンドポイント
$destination = "https://example.idp.com/sso/saml2"  # このリクエストを送信するIDPのSSOエンドポイント

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

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

# HTTP POSTリクエストを送信
$response = Invoke-WebRequest -Uri $destination -Method POST -Body "SAMLRequest=$requestBase64"

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

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