事象
SFDXで組織認証のコマンドを叩くと、localhostのポート1717へのリダイレクトが失敗して認証自体も失敗する。
開発環境はWindows 10とPowerShell 5.1である。
PS > sfdx force:auth:web:login -r https://test.salesforce.com -a sample@sample.com
ERROR running force:auth:web:login: connect ETIMEOUT XXX.XXX.XXX.XXX:443
結論
自分の場合は下記の環境変数を設定することで解消した。
変数値はサンプルであり、本来は実際のプロキシサーバーのアドレスを入れる。
# .NETのライブラリを使用してプロキシサーバーのアドレスを出力
PS > $WebProxy = [System.Net.WebRequest]::GetSystemWebProxy()
PS > $WebProxy.GetProxy("https://google.com") | Select -ExpandProperty OriginalString
http://proxy.com:8080
# 上記で出力したアドレスを環境変数「HTTP_PROXY」に設定
PS > $env:HTTP_PROXY="http://proxy.com:8080"
# HTTPS用の環境変数はプロトコルをHTTPSにする
PS > $env:HTTPS_PROXY="https://proxy.com:8080"
改めて認証用のコマンドを叩くと、組織認証に成功する。
PS > sfdx force:auth:web:login -r https://test.salesforce.com -a sample@sample.com
Successfully authorized sample@sample.com with org ID XXXXXXXXXXXXXXX
You may now close the browser
ログイン用に開かれたブラウザ画面は閉じてしまって良い。
なお、上記の環境変数はセッション中に限り有効である。
他のセッションやVisual Studio Codeの拡張機能を利用した認証の場合、
下記のコマンドを使用して上記で設定した値を環境変数として永続化する。
コントロールパネル経由で設定してももちろんよい。
# 管理者権限でPowerShellを開くこと
PS > [System.Environment]::SetEnvironmentVariable("HTTP_PROXY", "http://proxy.com:8080", "Machine")
PS > [System.Environment]::SetEnvironmentVariable("HTTPS_PROXY", "https://proxy.com:8080", "Machine")
システム環境変数を設定したら、PCを再起動すること。
上記以外には下記の対処法があるらしい。
- SFDXをバージョンアップする
- 認証時に入力するSalesforceのドメインを「私のドメイン」にする (XXX.my.salesforce.comのようなURL)
- 認証時にコールバックされるURLのポート番号を1717以外に設定する
原因
OAuthによる認証の過程でlocalhostの1717番へリダイレクトされるが、プロキシがあるせいでうまく遷移せずタイムアウトするのが原因だと思われる。