none
JSON形式WebHttpBindingでAD認証は可能でしょうか? RRS feed

  • 質問

  • 環境

     Windows 2003 Server Standerd Edition SP2

     IIS6.0

     Visual Web Developer 2008 Express Edition

     

    質問

     IIS6.0上のASP.NETサイトだと

     Active Directory認証を利用した

     シングルサインオン&ユーザー判定が可能ですが、

     WCFで作成したJSON形式のWebサービスでも

     ASP.NETサイトと同様にアクセスしてきた人を

     判定することは可能でしょうか?

     

     可能である場合、

     どのように設定すればよいのでしょうか?

     

     ご存知の方がいらっしゃいましたら

     どうかご教授下さい。

     

     現状、webHttpBinding&JSON形式で出力するサービスを

     IIS上でWindows認証するアプリケーションとして配置すると

     

      "このサービスのセキュリティ設定では 'Anonymous' 認証を必要としていますが、
       このサービスをホストする IIS アプリケーションではその認証方法が有効になっていません。"

     

     というエラーになってしまいます。

     

     以上です。

     よろしくお願いします。

    2008年5月22日 17:02

回答

  • tak.05さん こんにちは。

     

    IISの認証方法の設定に匿名アクセスではなく、統合Windows認証を使用して、認証
    が行えるかどうかということでよろしいでしょうか。

     

    AD環境で確認したわけではありませんが、Vista IIS7.0上でWindows統合認証を行うように設定し、

    次のように構成を設定して、認証が行われるようになりました。webHttpBindingのbindingの構成で資格情報にWindows認証を使用するように設定しています。

     

    Code Snippet
     <system.serviceModel>
      <bindings>
       <webHttpBinding>
        <binding name="WinAuthBinding">
         <security mode="TransportCredentialOnly">
          <transport clientCredentialType="Windows"/>
         </security>
        </binding>
       </webHttpBinding>

      </bindings>
      <behaviors>
       <endpointBehaviors>
        <behavior name="AjaxBehavior">
         <enableWebScript/>
        </behavior>
       </endpointBehaviors>
      </behaviors>
      <services>
       <service name="CalculatorService">
        <endpoint address="" behaviorConfiguration="AjaxBehavior" binding="webHttpBinding"
                      bindingConfiguration="WinAuthBinding" contract="ICalculator"/>
       </service>
      </services>
      <serviceHostingEnvironment aspNetCompatibilityEnabled="false"/>
     </system.serviceModel>

     

    AD環境で確認したわけではないのでうまくいかなかったら申し訳ないです。

    2008年5月23日 12:24
  • WCFの資格情報はSystem.ServiceModel.OperationContext.Currentから参照できるSecurityContextを使用します。

     

    WCFはデフォルトではASP.NETアプリケーションと同一アプリケーションドメイン環境でホストされていても資格情報を共有しません。

    WCFサービスとASP.NETをサイド バイ サイドでホストした場合の互換性などの説明は以下のページが参考になると

    思います。

    http://msdn.microsoft.com/ja-jp/library/aa702682.aspx

    2008年5月26日 2:30

すべての返信

  • tak.05さん こんにちは。

     

    IISの認証方法の設定に匿名アクセスではなく、統合Windows認証を使用して、認証
    が行えるかどうかということでよろしいでしょうか。

     

    AD環境で確認したわけではありませんが、Vista IIS7.0上でWindows統合認証を行うように設定し、

    次のように構成を設定して、認証が行われるようになりました。webHttpBindingのbindingの構成で資格情報にWindows認証を使用するように設定しています。

     

    Code Snippet
     <system.serviceModel>
      <bindings>
       <webHttpBinding>
        <binding name="WinAuthBinding">
         <security mode="TransportCredentialOnly">
          <transport clientCredentialType="Windows"/>
         </security>
        </binding>
       </webHttpBinding>

      </bindings>
      <behaviors>
       <endpointBehaviors>
        <behavior name="AjaxBehavior">
         <enableWebScript/>
        </behavior>
       </endpointBehaviors>
      </behaviors>
      <services>
       <service name="CalculatorService">
        <endpoint address="" behaviorConfiguration="AjaxBehavior" binding="webHttpBinding"
                      bindingConfiguration="WinAuthBinding" contract="ICalculator"/>
       </service>
      </services>
      <serviceHostingEnvironment aspNetCompatibilityEnabled="false"/>
     </system.serviceModel>

     

    AD環境で確認したわけではないのでうまくいかなかったら申し訳ないです。

    2008年5月23日 12:24
  • handcraft 様、

    回答ありがとうございます。

     

    できました。

     

    なるほど、webHttpBindingの設定を作って、

    endpointのbindingConfigurationで指定すればよかったんですね。

    勉強になりました。

     

    設定についてはこれでクリアできました。

    大変助かりました。

    ありがとうございました。

     

    でも、通常のASP.NETサイトのように

    Context.User.Identity.Name

    でユーザ情報取得できないんですね。。。

    どうやるんでしょう?

    こちらはまだなにも調べてないので

    まず自力で調査してみます。

     

    ありがとうございました。

    2008年5月26日 2:05
  • WCFの資格情報はSystem.ServiceModel.OperationContext.Currentから参照できるSecurityContextを使用します。

     

    WCFはデフォルトではASP.NETアプリケーションと同一アプリケーションドメイン環境でホストされていても資格情報を共有しません。

    WCFサービスとASP.NETをサイド バイ サイドでホストした場合の互換性などの説明は以下のページが参考になると

    思います。

    http://msdn.microsoft.com/ja-jp/library/aa702682.aspx

    2008年5月26日 2:30