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 環境で ASP.NET Core アプリケーションをホストする場合、 ASP.NET Core Hosting Bundle をインストールするだけで以下が自動的にインストールされる .NET Runtime ASP.NET Core Runtime

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

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

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