none
IISが基本認証のパスワードをキャッシュ? RRS feed

  • 質問

  • イントラネットのWindows 2008R2 + IIS 7.5 にて基本認証を有効にし、ADアカウントでログオンして閲覧するためのコンテンツを用意しています。

    するとなぜか、ADユーザーアカウントのパスワードを変更しても、新旧どちらのパスワードでも基本認証でログオンできることに気が付きました。IISを再起動すると新パスワードでのみログオン可能となるため、IISが旧パスワードをキャッシュしているのでは、と推測しています。

    IISでキャッシュしないように、あるいはごく短時間の有効期限しかキャッシュしないように変更したいのですが、どうすれば良いでしょうか?

    2015年4月7日 6:07

回答

  • > Webサーバと同じActiveDirectoryに参加しているクライアントは全体の三分の一程度で、
    > その他は異なるAD参加だったり、ワークグループ設定だったりします。

    一番最初の質問に、「ADアカウントでログオンして閲覧する」と書いてあったので、全てのユーザーが同じ AD ドメイン内のドメインユーザーで、個人に与えられたドメインユーザーアカウントを使ってログインすると思ってました。

    > 利用者はいろいろな環境から使用するため、使い方(手順)を統一させたいと考えています。

    そのために何が何でも基本認証を使うということであれば、IIS のキャッシュを何とかするしかなさそうです。

    IIS のキャッシュの詳細は以下のページの「パスワードの変更をした後も、依然として古いパスワードが有効となる」のセクションを見てください。

    IIS Insider
    https://technet.microsoft.com/ja-jp/library/bb878030.aspx

    上記の記事は IIS6 以下のことを書いてますが、IIS7 でも同じということが以下の記事の 3. 項に書いてあります。

    List of registry keys affecting IIS7 behavior
    http://blogs.iis.net/ksingla/archive/2007/12/30/list-of-registry-keys-affecting-iis7-behavior.aspx

    ところが、以下の記事によると UserTokenTTL の設定は IIS6 と違って IIS7.5 では効果がないとのことで、本当のところは、基本認証は触ったこともない自分には分かりません。

    IIS7.5 - User Token Cache Timeout Ignored
    http://forums.iis.net/t/1165120.aspx?IIS7+5+User+Token+Cache+Timeout+Ignored

    とりあえず、自分の開発環境(Vista SP2 / IIS7)のレジストリを見てみましたが、UserTokenTTL というのは無かったです。それを追加したら効果があるかどうかは試してません。

    質問者さんの方でチェックいただければと思います。

    それはやりたくない、もしくはやっても効果がないということであれば、認証方式を変えるしか手はなさそうです。(もしくは諦める?)

    三分の一のドメインユーザーにも、残り三分の二のドメイン外のユーザーにも「使い方(手順)を統一」したいということであれば、基本認証に変えて ASP.NET Forms 認証を使ってはいかがですか。


    • 編集済み SurferOnWww 2015年4月8日 9:46 一部訂正
    • 回答としてマーク S.Hara 2015年4月9日 4:54
    2015年4月8日 9:39

すべての返信

  • チャブーンです。

    以下のKBは参考にならないでしょうか。KBではOldPasswordAllowedPeriodレジストリ値をドメインコントローラ側で制御する、とあります。

    http://support.microsoft.com/en-us/kb/906305

    追記:基本認証はあくまで、クライアント=Webサーバ間のものなので、Webサーバ=ドメインコントローラ間でNTLM認証が使われれること鑑みれば、この項目は当てはまるように思われます。既定では60分この設定は有効(旧パスワードが使える)ので、それに当てはまればおそらくこれでしょう。ドメインコントローラの設定を変えたくない、という場合、Kerberosによる委任設定を基本認証と組み合わせることで、多分解消するように思います。したの資料が参考になるのではないでしょうか。

    https://msdn.microsoft.com/ja-jp/library/aa292114(v=vs.71).aspx

    2015年4月7日 6:35
  • アドバイスありがとうございます。ドメインコントローラのレジストリ変更は影響範囲が大きそうで、躊躇しています。事前に検証環境を構築して試さないと怖いです。

    そこで、このIISサーバのレジストリを修正してみましたが、やはり駄目でした。またグループポリシーで『対話型ログオン:キャッシュする過去のログオン数(ドメインコントローラが使用できない場合)』を 0 にしましたが、挙動は変わりませんでした。まぁ、ドメインコントローラと通信できる場合なので設定通りですね。

    Windows2008R2のグループポリシーに同様の設定がないかと探しましたが、なさそうですね。

    2015年4月7日 8:58
  • チャブーンです。

    入れ違いのようですが、ドメインコントローラ設定を変えたくない場合の方法についてもコメントしたので、前回の回答の追記部分をご覧になってください。

    ただ、Kerberosの委任については、ドメインコントローラ側の「Webサーバのコンピュータオブジェクト」の設定を変更する必要があります。これの影響範囲はWebサーバとドメインコントローラ間の認証だけですので、ドメインコントローラ全体の設定に影響を与えることは、とくにないはずです。

    2015年4月7日 9:13
  • イントラネットの Active Directory ドメインサービス下で、ユーザーも Web サーバーもドメイン環境に属しいているのでしょうか?

    であれば、統合 Windows 認証でシングルサインオンが使えると思うのですが、そうしない事情が何かあるのでしょうか?


    • 編集済み SurferOnWww 2015年4月7日 9:22 誤字訂正
    2015年4月7日 9:14
  • Webサーバと同じActiveDirectoryに参加しているクライアントは全体の三分の一程度で、その他は異なるAD参加だったり、ワークグループ設定だったりします。

    利用者はいろいろな環境から使用するため、使い方(手順)を統一させたいと考えています。

    2015年4月8日 8:03
  • > Webサーバと同じActiveDirectoryに参加しているクライアントは全体の三分の一程度で、
    > その他は異なるAD参加だったり、ワークグループ設定だったりします。

    一番最初の質問に、「ADアカウントでログオンして閲覧する」と書いてあったので、全てのユーザーが同じ AD ドメイン内のドメインユーザーで、個人に与えられたドメインユーザーアカウントを使ってログインすると思ってました。

    > 利用者はいろいろな環境から使用するため、使い方(手順)を統一させたいと考えています。

    そのために何が何でも基本認証を使うということであれば、IIS のキャッシュを何とかするしかなさそうです。

    IIS のキャッシュの詳細は以下のページの「パスワードの変更をした後も、依然として古いパスワードが有効となる」のセクションを見てください。

    IIS Insider
    https://technet.microsoft.com/ja-jp/library/bb878030.aspx

    上記の記事は IIS6 以下のことを書いてますが、IIS7 でも同じということが以下の記事の 3. 項に書いてあります。

    List of registry keys affecting IIS7 behavior
    http://blogs.iis.net/ksingla/archive/2007/12/30/list-of-registry-keys-affecting-iis7-behavior.aspx

    ところが、以下の記事によると UserTokenTTL の設定は IIS6 と違って IIS7.5 では効果がないとのことで、本当のところは、基本認証は触ったこともない自分には分かりません。

    IIS7.5 - User Token Cache Timeout Ignored
    http://forums.iis.net/t/1165120.aspx?IIS7+5+User+Token+Cache+Timeout+Ignored

    とりあえず、自分の開発環境(Vista SP2 / IIS7)のレジストリを見てみましたが、UserTokenTTL というのは無かったです。それを追加したら効果があるかどうかは試してません。

    質問者さんの方でチェックいただければと思います。

    それはやりたくない、もしくはやっても効果がないということであれば、認証方式を変えるしか手はなさそうです。(もしくは諦める?)

    三分の一のドメインユーザーにも、残り三分の二のドメイン外のユーザーにも「使い方(手順)を統一」したいということであれば、基本認証に変えて ASP.NET Forms 認証を使ってはいかがですか。


    • 編集済み SurferOnWww 2015年4月8日 9:46 一部訂正
    • 回答としてマーク S.Hara 2015年4月9日 4:54
    2015年4月8日 9:39
  • レジストリに UserTokenTTL を新規登録したところ、IIS7.5でもキャッシュの有効期限をコントロールできるようになりました。ありがとうございます。

    ADアカウントのパスワード変更用CGIへの認証のため、基本認証で現在のパスワードを取得したかったのです。おかげさまで期待どおり動作するようになりました。

    ASP.NET Forms認証を使って認証画面を作り込んだほうがユーザーフレンドリーで良いでしょうね。次バージョン用に勉強してみます。

    2015年4月9日 5:09
  • > レジストリに UserTokenTTL を新規登録したところ、IIS7.5でもキャッシュの有効期限を
    > コントロールできるようになりました。

    情報提供をありがとうございました。

    効果がなかったという IIS Forum の記事はやり方の問題だったようですね。

    2015年4月9日 5:40