MENU

IISの統合Windows認証を使ったSSO(Single Sign On)

目次

統合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のフローは次の通りです。

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

SSO を利用するユーザのユーザIDは、Active Directory の UserPrincipalName と一致させて Chat&Messenger に事前に登録が必要です。UserPrincipalName は Active Directory のユーザ一覧を取得し、CSVを作成したい も参考にしてください。

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 拡張を別途インストールする

IIS は、CAMServerと同じサーバで同居し、80番ポートで稼働させてください。

ISAPI フィルター: IIS における拡張モジュールのロードをサポートします。AspNetCoreModuleV2 をロードするために必要です。

ISAPI 拡張: IIS に ISAPI 拡張機能を追加します。 AspNetCoreModuleV2 の動作に必須です。 IISマネージャー起動(iisreset)

ASP.NET Core Hosting Bundle をインストール

ASP.NET Core Hosting Bundle をインストールしてください。インストール後、IISを再起動してハンドラーマッピング に AspNetCoreModuleV2 が存在していることを確認してください。

IIS 環境で ASP.NET Core アプリケーションをホストする場合、 ASP.NET Core Hosting Bundle をインストールするだけでOKです。

ASP.NET Core ランタイムをバージョンアップする場合も、同様にHosting Bundleのみダウンロード、インストールしてください。次のコマンドでどの ASP.NET Core ランタイム で実行しているか確認できます。
dotnet –list-runtimes

IIS再起動
ハンドラーマッピング

アプリケーションの追加(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を追加

自動ログオンを確認

「レベルのカスタマイズ」をクリックし、「ユーザー認証」→「ログオン」で 「イントラネット ゾーンでは自動的にログオンする」が選択されていることを確認

C&Mユーザのクライアント端末全員でこの設定が必要ですが、グループポリシー管理コンソールで一元管理ができます。

LDAP設定

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

FQDN(完全修飾ドメイン名)でアクセスとSPN 登録

IISのWindows統合認証ページへホスト名(NetBIOS名)でアクセスする場合は不要ですが、FQDN(完全修飾ドメイン名 例 sso.example.com)でアクセスする場合はSPN 登録が必要です。

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認証を使う場合は、以下ブログ記事を参考にしてください。

あわせて読みたい
ロードバランサー + SSL環境で、IISの統合Windows認証を成功させる構成 【統合Windows認証について】 統合Windows認証(Integrated Windows Authentication)は、 IISとユーザーが同じActive Directoryドメインに所属している場合に、自動的...
  • URLをコピーしました!
目次