統合Windows認証の概要
統合Windows認証(Integrated Windows Authentication, IWA)は、 IISとユーザーが同じドメインにログインしている場合に、自動的にユーザの認証情報をIISに提供する仕組みです。 ASP.NET のC#でサイトを作成すると、ユーザ認証済み判定、及び認証済みユーザの情報が取得できます。
これにより、ユーザーは追加のログイン操作をせずに、IISがホストする(または連携する)ウェブアプリケーションにアクセスでき、他のアプリケーションサーバとSSO連携が実現できます。
※同じドメインに参加していない場合や、認証されていないユーザがIISのページへアクセスするとサインインダイヤルが表示され、 正しく認証しない場合は、HTTP Error 401.1 – Unauthorized となる。

SSO(Single Sign On)フロー
Chat&Messenger オンプレミスの Ultimate プランでは統合Windows認証によりSSOが可能です。SSOのフローは次の通りです。
- クライアントは、最初に統合Windows認証されたページ /cam-iissso にアクセスする
- /cam-iissso ページでは、 ASP.NET により認証済み判定を行い、CAMServer へ連携する
- CAMServer はLDAP検索を行い正規ADユーザである事を確認し、ssoToken(一意なランダム値30バイト以上)、と共にCAMServer へアクセスするURLを生成し、リダイレクト要求を行う
- CAMServer にアクセスし、ssoToken を用いて認証する。認証成功したら、APIアクセス用のセッションIDが割り当てられる

SSOを実現するための必要要件
Windows Server をドメインに参加
CAMServer/IIS を動作させる Windows Server を、Active Directory ドメインに参加させてください。
既存のWindows Server が参加しているドメインを確認するには、「サーバーマネージャー」→ 左メニュー「ローカルサーバー」クリック→「コンピューター名」をクリックしドメイン欄を参照してください。
また、IIS は CAMServerと同じサーバで同居し、80番ポートで稼働させてください。CAMServer の 前段にLoadBalancer を配置する場合は、CAMServer を8080番ポートで稼働させるため、IISは443番ポートも利用可能です。
IISのインストール
サーバの役割からIISをインストールしてください。
IISインストール時に、役割サービスの選択オプションで以下チェックを行う。
- Windows 認証
- ISAPI フィルター
- ISAPI 拡張を別途インストールする

ISAPI フィルター: IIS における拡張モジュールのロードをサポートします。AspNetCoreModuleV2 をロードするために必要です。
ISAPI 拡張: IIS に ISAPI 拡張機能を追加します。 AspNetCoreModuleV2 の動作に必須です。 IISマネージャー起動(iisreset)
ASP.NET Core Hosting Bundle をインストール
ASP.NET Core Hosting Bundle をインストールしてください。
インストール後、IISを再起動してハンドラーマッピング に AspNetCoreModuleV2 が存在していることを確認してください。



アプリケーションの追加(cam-iissso)
Default Web Site に cam-iissso アプリケーションを追加してください。
- エイリアス: cam-iissso
- 物理パス: <CAMServer>\sys\cam-iissso-net8.0
また、cam-iissso-net8.0 フォルダに対し IIS_IUSRS グループで閲覧アクセス権(読み取りと実行、フォルダの内容の一覧表示、読み取り)を付与してください。


Windows認証を有効にする
「Windows認証」を右クリックし、「有効」にします。

インターネット オプションの設定
IISで提供するサイトをイントラネットゾーンに追加
インターネット オプションを選択し、「セキュリティ」タブをクリックし、「ローカル イントラネット」を選択 「サイト」ボタンをクリックし、「詳細設定」を選択しサイトのURLを追加
自動ログオンを確認
「レベルのカスタマイズ」をクリックし、「ユーザー認証」→「ログオン」で 「イントラネット ゾーンでは自動的にログオンする」が選択されていることを確認


LDAP設定
IISを使ったシングルサインオン行う場合は、LDAP設定(LDAPUrl,LDAPBaseDN,代理認証を行うADユーザ)が必要です。

FQDN(完全修飾ドメイン名)でアクセスとSPN 登録
IISのWindows統合認証ページへホスト名(NetBIOS名)でアクセスする場合は不要ですが、FQDN(完全修飾ドメイン名 例 sso.example.com)でアクセスする場合は以下2点の考慮が必要です。
DNS 設定
Active Directory ドメインコントローラーの DNS に FQDN を設定してください。DNSマネージャーは「ファイル名を指定して実行」から dnsmgmt.msc と入力して開けます。
SPN(Service Principal Name)の登録
SPN(Service Principal Name)とは、Kerberos 認証において特定のサービスを Active Directory 上で一意に識別するための名前です。FQDN でアクセスする場合は、SPN を登録することで、クライアントがアクセス先のサービスに対して Kerberos のチケットを正しく要求できるようになります。
たとえば https://sso.example.com
にアクセスする際、クライアント(ブラウザ)は Active Directory に「HTTP/sso.example.com というサービスに接続したい」とチケットを要求します。Active Directory は、その SPN がどのアカウントに紐付いているかを確認し、該当するサービスチケットを発行します。SPN が正しく登録されていないと、Kerberos 認証に失敗し、結果として認証ダイアログが表示される原因となります。
SPN 登録は、IIS をホストしているコンピュータアカウントに対して行います。たとえば、ad
というホスト名で動作している IIS に対しては、以下のように SPN を登録します。
setspn -S HTTP/sso.example.com ad$
登録後、以下のコマンドで確認が可能です:
setspn -L ad$
この結果に HTTP/sso.example.com
が表示されていれば、SPN の登録は成功しています。
HTTPプロキシ接続環境下では利用できない
SSOはHTTPプロキシ接続環境下では利用できないので注意してください。
LoadBalancer + SSL環境での構成
LoadBalancer + SSL環境でIISの統合Windows認証を使う場合は、以下ブログ記事を参考にしてください。
