PowerShellのコマンドレット Invoke-WebRequest , Invoke-RestMethod で Basic認証 / BasicAuth をかける方法。
-Credential 引数に ユーザー名か、PSCredentialオブジェクトを渡してあげます。
確認環境
パッケージ | バージョン |
---|---|
OS X | 10.11.6 , El Capitan |
PowerShellCore | v6.0.0-alpha.18 |
ヘルプ
-Credential
Specifies a user account that has permission to send the request.
The default is the current user.
Type a user name, such as User01 or Domain01\User01,
or enter a PSCredential object, such as one generated
by the Get-Credential cmdlet.
Credential 作成、実行
Credential 作成
ヘルプの通り Get-Credential を使う場合。 (パスワードを引数で渡す方法はないので、実行時に入力)
$USER = "namae"
$cred = Get-Credential -UserName $USER -Message "enter PASS"
毎回いれたくないけど、パスワードをハードコードしたくない人向け。
# ファイルにパスワードを保存しておく (暗号化文字列な状態で)
Read-Host -AsSecureString | ConvertFrom-SecureString | Out-File sec.txt
# ファイルに保存しておいたパスワードを利用する
$USER = "namae"
$secpasswd = cat sec.txt | ConvertTo-SecureString
$cred = New-Object System.Management.Automation.PSCredential($USER, $secpasswd)
ちょっと試すだけだから、ファイルの利用とかは避けたいという場合。
$USER = "namae"
$PASS = "himitsu"
$secpasswd = ConvertTo-SecureString $PASS -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($USER, $secpasswd)
コマンドレットを実行
Credential が作成できたら、後は実行だけ
Invoke-WebRequest -Uri "http://internal.server.local/api" -Credential $cred
参考:
- PowerShell で Get-Credential を利用する
- Using PowerShell credentials without being prompted for a password
- Qiita : PowerShell_基本認証接続
その他:
PowerShell 6.0 のコマンドレットには -SkipCertificateCheck オプションが追加されているので、SSL自己証明書を利用している際には、手軽にスキップできました。開発用途で立ててあるAPIなどにアクセスする際には、簡単にできて良いのかなぁと。