Question

mogu__mogu on Thu, 17 Nov 2011 02:33:10


こんにちわ、いつも拝見させてお世話になっております。

いま、WCFでのKerbros認証の設定をやってて、ハマってしまって、うまくいきません。
ご教授お願いします。

<<環境>>
  AD サーバー:AD1(Windows Server 2008 R2、AD構成)
  SQL サーバー:SQL1(Windows Server 2008 R2、SQL Server 2008 R2)
  WEBサーバー:IIS1(Windows Server 2008 R2、IIS7.5)
  という、3台構成です。

<<要件>>
  IIS1 にWCFアプリケーションを配置して、Windows 認証を行いたい。
  (SQL1サーバーのDBにも、Windows認証する。)
  WCFは、Silverlight から利用するため、customBinding を使用します。
  (WCF Data Service ではないです。)

<<やってみたこと>>
 [SQL Server]
  ・SQL Server にWindows 認証でログインできるように、
   SQL Server のサービスアカウントを、AD上のアカウントで
   起動するように設定。
   →他端末から、SQL Server Management Studio で
    Windows 認証でログインできることは確認。

 [IIS設定]
  ・ポート9999 でサイトを作成。
  ・IISのサービスアカウント変更。
   (ApplicationPoolIdentity→xxxx\IISSvAc(AD上のアカウント))
  ・認証設定は、
     Windows 認証(プロバイダ:Negotiate:Kerberos)
     拡張設定:オフ
     カーネルモード:オフ
  ・SPN 設定(下記のコマンドをADサーバーで流す。)
    setspn -a http/iis1:9999 zzzzzz\IISSvAc
    setspn -a http/iis1.xxxx.yyyy.co.jp:9999 xxxx\IISSvAc
    次に、確認の為、
    setspn -l zzzzzz\IISSvAc
    →(実行結果)
     次の項目に登録されている CN=IISSvAc,OU=ppppp,DC=xxxx,DC=yyyy,DC=co,DC=jp:
     http/IIS1.xxxx.yyyy.co.jp:9999
     http/IIS1:9999
     (HOST/xxxx\IISSvAc は、表示されなかった。)
  ・AD の xxxx\IISSvAc ユーザーに委任を設定
 
 [WCF設定]
  ・web.config
<?xml version="1.0"?>
<configuration>
 <system.serviceModel>
  <behaviors>
   <serviceBehaviors>
        <behavior name="zzz_WCFServiceBehavior">
     <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
   </serviceBehaviors>
  </behaviors>
  <bindings>
   <customBinding>
    <binding name="zzz_WCFService.customBinding0">
          <binaryMessageEncoding/>
          <httpTransport  authenticationScheme="Negotiate" />
        </binding>
      </customBinding>
  </bindings>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
  <services>
   <service behaviorConfiguration="zzz_WCFServiceBehavior" name="zzz_WCFService">
    <endpoint address="" binding="customBinding" bindingConfiguration="zzz_WCFService.customBinding0" contract="zzz_WCFService"/>
      </service>
    </services>
 </system.serviceModel>
 <system.web>
    <compilation debug="true"/>
  </system.web>
  <appSettings>
    <add key="ConnectionString" value="Data Source=SQL1\kkkk;Initial Catalog=qqqq;Persist Security Info=False;Integrated Security=true" />
  </appSettings>
</configuration>

<<現象>>
 認証ができない。ユーザー、パスワード入力画面が表示され、正しい値を入力しても、
 通らない。(認証されない)

 


Sponsored



Replies

mogu__mogu on Sat, 03 Dec 2011 10:06:26


もうすこし、チャレンジしてみました。

IISに配置するものを、WCFではなく、htmlファイルを配置して試してみましたが

結果は同じでした。要するに、WCFは関係なく、IISの設定または、Kerbros認証設定(ADか、SetSpn)の問題ということろまで絞り込みました。

そこで、Kerbros認証のログ出力設定

http://support.microsoft.com/kb/262177/ja

を行い、ログを出してみました。

すると、イベントログ(システム)には、下記の2種類のエラーが出てきました。

KDC_ERR_PREAUTH_REQUIRED
KRB_AP_ERR_MODIFIED

何かが原因で、Kerbros の暗号化が行われなかった可能性があるようで、

再度、SetSpnの内容を確認しましたが、問題がないように思われます。

もし、上記のような現象に、心当たりがあれば、ご教授お願いいたします。

 


2011/12/9 追記

うまくいきました。原因は、IIS のアプリケーションプールを実行するユーザー権限でした。

Administrator権限をもつ人を指定するとうまくいきました。さすがに、Administrator権限は、権限が過大なので、どの権限までが妥当であるかは検討する必要があります。

今まで、閲覧して頂いた皆様、ありがとうございました。