WSSE認証用のヘッダ文字列を生成するスクリプト
はてなブックマークのAtomAPIを利用するためにはWSSE認証を使用するらしいので、PowerShellからWSSE認証を行うためのスクリプトを作った。
Get-WsseHeader.ps1
param([string]$userName, [string]$password) if($userName.Length -eq 0 -or $password.Length -eq 0 -or $args[0] -eq "-?") { $commandName = [IO.Path]::GetFileNameWithoutExtension($MyInvocation.MyCommand.Name) Write-Host -foregroundColor Yellow @" Name: $commandName Description: 指定したユーザ名とパスワードからWSSE認証用のヘッダ文字列を取得します。 Usage: $commandName [[-userName] <string>] [[-password] <string>] -userName <string> ユーザ名 -password <string> パスワード "@ exit 1 } # セキュリティトークン $nonce = New-Object byte[] 8 (New-Object Random).NextBytes($nonce) # 現在の日付 - ISO-8601表記 $created = [DateTime]::Now.ToString("yyyy-MM-ddTHH:mm:ssZ") # セキュリティトークン、現在の日付、パスワードを連結して、SHA1アルゴリズムでダイジェスト化する。 $passwordDigest = [Text.Encoding]::UTF8.GetBytes($created + $password) $buf = New-Object byte[] ($nonce.Length + $passwordDigest.Length) [Array]::Copy($nonce, $buf, $nonce.Length) [Array]::Copy($passwordDigest, 0, $buf, $nonce.Length, $passwordDigest.Length) $passwordDigest = (New-Object Security.Cryptography.SHA1CryptoServiceProvider).ComputeHash($buf) # Base64エンコードする必要あり $nonce = [Convert]::ToBase64String($nonce) $passwordDigest = [Convert]::ToBase64String($passwordDigest) # ヘッダ文字列 "UsernameToken Username=`"$userName`", PasswordDigest=`"$passwordDigest`", Nonce=`"$nonce`", Created=`"$created`"
使い方
$webReq = New-Object [Net.HttpWebRequest]::Create("url") $webReq.Headers.Add("X-WSSE", (Get-WsseHeader "ユーザ名" "パスワード")) # do something