トップ回答者
JSON形式WebHttpBindingでAD認証は可能でしょうか?

質問
-
環境
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 アプリケーションではその認証方法が有効になっていません。"というエラーになってしまいます。
以上です。
よろしくお願いします。
回答
-
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環境で確認したわけではないのでうまくいかなかったら申し訳ないです。
-
WCFの資格情報はSystem.ServiceModel.OperationContext.Currentから参照できるSecurityContextを使用します。
WCFはデフォルトではASP.NETアプリケーションと同一アプリケーションドメイン環境でホストされていても資格情報を共有しません。
WCFサービスとASP.NETをサイド バイ サイドでホストした場合の互換性などの説明は以下のページが参考になると
思います。
すべての返信
-
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環境で確認したわけではないのでうまくいかなかったら申し訳ないです。
-
handcraft 様、
回答ありがとうございます。
できました。
なるほど、webHttpBindingの設定を作って、
endpointのbindingConfigurationで指定すればよかったんですね。
勉強になりました。
設定についてはこれでクリアできました。
大変助かりました。
ありがとうございました。
でも、通常のASP.NETサイトのように
Context.User.Identity.Name
でユーザ情報取得できないんですね。。。
どうやるんでしょう?
こちらはまだなにも調べてないので
まず自力で調査してみます。
ありがとうございました。
-
WCFの資格情報はSystem.ServiceModel.OperationContext.Currentから参照できるSecurityContextを使用します。
WCFはデフォルトではASP.NETアプリケーションと同一アプリケーションドメイン環境でホストされていても資格情報を共有しません。
WCFサービスとASP.NETをサイド バイ サイドでホストした場合の互換性などの説明は以下のページが参考になると
思います。