インターネットへのアクセスにプロキシが必要な社内ネットに、Webサーバを立てて、Auth Code FlowでOIDCの認証を利用しようとすると、 Webサーバ(OIDCのクライアント)とOIDCプロバイダーの間にもProxyを通しておく必要がある。
例えば、expressでAzureADのOIDC認証を利用しようとすると、passportおよびpassport-adでOIDCの認証を利用できるのだが、 expressとかpassportが裏で行うOIDCプロバイダーへのアクセスにもproxyを通す必要がある。
しかし、いわば勝手に通信をしてしまうので、直接プロキシを通しずらいという問題がある。
そこで、global-agent
というのを試した。
ほかにもいくつかあったが、簡単に使えてWeekly Downloadがまぁまぁ多かったのが採用の理由。
使い方は、公式に書いてある通りなのだが、一応メモしておく。 他の使い方は公式を参照のこと。
- global-agentを追加する。
sh
yarn add global-agent
- GLOBAL_AGENT_を頭につけたプロキシの環境変数を設定しておく。
export GLOBAL_AGEMT_HTTP_PROXY=$HTTP_PROXY export GLOBAL_AGEMT_HTTPS_PROXY=$HTTPS_PROXY export GLOBAL_AGEMT_NO_PROXY=$NO_PROXY
- 起動するコードに以下のimportを追加しておく。
import 'global-agent/bootstrap';
global-agentによってnodejsのhttpまたはhttpsモジュールの接続をproxyを介するようになる。 passportをはじめとする、大体のモジュールはhttp/httpsモジュールを使って通信をしている。
なので、Azure ADのOIDC認証も、プロキシを越えて利用できるようなるということ。