クライアントから次のようなリクエストがありました。
これは公開ウェブサイトであり、いくつかの代理店からの従業員向け情報。クライアントは、従業員にのみ表示されるポップアップをフロントページに表示したいと考えています。
機関は認証に CAC カードを使用します。これらのカードには複数の証明書があります。内部サイトでは、IIS を適切にセットアップして AD と比較するだけで、非常に簡単です。
しかし、これは外部サイトなので、認証自体は必要ありません。IIS が CAC/証明書の存在をサイレントにチェックし、存在する場合はポップアップ ロジックを実行し、存在しない場合は無視するようにします。2 番目の部分はすべてコーディングですが、IIS が CAC/証明書をサイレントに検索できるかどうかを知る必要があります。
当初のアイデアは、リクエスト IP を社内の IP 範囲と比較することでしたが、私のサーバーはロード バランサーの背後にあり、リクエストがサーバーに到達するまでに、そのリクエストにはロード バランサー IP が付与され、すべてのリクエストが範囲内に収まることになります。
状況は複雑で、これまで調べた限りでは不可能だとは思いますが、
前もって感謝します
答え1
ウェブサーバーはクライアントのスマートカードを「見る」ことはできません。全体的にこれはWebブラウザによって行われます。IISがこれに影響を与える唯一の方法は、「受け入れ可能な」証明書発行者のDNのリストを送信することです(これはTLSv1.3でももう不可能だと思います)。しかし、ブラウザが証明書リストを表示する必要があると判断した場合は、意思証明書リストを表示します。
ほとんどの Web サイト (CAC やその他のクライアント証明書認証を使用しているものも含む) には、証明書認証を必要とする専用のログイン URL がありますが、システムの他の部分には証明書認証は必要ありません。代わりに、「ログイン」状態は従来の Cookie/セッションを通じて伝達されます。これにより、システムは複数の異なる認証方法を提供できます。(IIS が URL ごとの証明書認証をサポートしているかどうかはわかりません。「ログイン」ページには別のサブドメインを使用する必要があるかもしれません。)
一例として、 の「サインイン」ページが挙げられます。このページではhttps://account.cern.ch/account/
、実際にはすべてを Microsoft ADFS 経由で処理しているようです。
あるいは、Web アプリケーション全体を 2 つの異なるサブドメインでホストすることもできます。1 つはパブリック アクセス用、もう 1 つは認証が必要です。(これはhttps://public.cyber.mil/
私が最近見た例の 1 つです。)