誰かが助けてくれることを願っています!
JSONを使用してWCFサービスを呼び出していますが、ユーザーの資格情報を取得できません。
Kerberosを使用しているため、IISは次のように設定されています。
サーバー側のタスク:
- IISサーバーはドメインのメンバーです
- AD Users&ComputersMMCのIISサーバーコンピューターアカウントを「TrustedforDelegation」として設定します
- このポリシーを有効にするには、IISサーバーを再起動する必要があります。
- 統合Windows認証は、サイト/仮想ディレクトリに対してのみ選択する必要があります
- IISでは、認証方法としてNTLMのみを設定することはできません(これは通常問題ではありません。NEGOTIATEがデフォルトであるため、これを変更するスクリプトを特に実行しない限り、心配する必要はありません)。
- IISサーバー名は、ADのアカウント名と完全に一致する必要があります。または、IISサイトが代替名として設定されている場合はSetSPNツールを使用する必要があります(たとえば、サーバーはserver01.domain.com、Webサイトはwww.application.com)。
クライアント側のタスク
- クライアントはIE5.x+を使用している必要があります。クライアントがIE6を実行している場合は、[ツール]>[インターネットオプション]>[詳細設定]から[統合Windows認証を有効にする(再起動が必要)]が選択されていることを確認します。
- Webサイトは、クライアントにとってローカルイントラネット(インターネットゾーンではない)サイトとして認識される必要があります。理由を説明するドキュメントは見たことがありませんが、それ以外の方法で機能させることができたことがありません。必要に応じて、これをローカルイントラネットサイトリストに具体的に追加します。
- クライアントアカウントは、ADユーザーおよびコンピューターMMCで「機密、委任しない」としてマークされてはなりません。
wsHTTPBindingを使用すると、すべてがうまく機能します。ただし、JSONを機能させるには、WebHttpBindingを使用する必要があります。次に、偽装を使用してバックエンドサービスと通信できるように、ユーザーの資格情報を取得する必要があります。
WFC構成でのバインディングは次のとおりです。http: //underground.infovark.com/2008/03/21/wcf-webhttp-binding-and-authentication/を使用して次のことを行いました 。
<webHttpBinding>
<binding name="AjaxBinding">
<security mode="None">
<transport clientCredentialType="Ntlm" />
</security>
</binding>
</webHttpBinding>
<endpoint name="DataJson" address="Datajson" binding="webHttpBinding"
bindingConfiguration="AjaxBinding"
behaviorConfiguration="jsonbehaviour" contract="MyContract"/>
<behavior name="jsonbehaviour">
<!--<webHttp/>-->
<enableWebScript/>
</behavior>
WCFサービスを正常に呼び出していますが、匿名以外から何も取得できないHttpContext.Current.User.Identity
ためServiceSecurityContext.Current.WindowsIdentity
、次の操作を実行できません。
WindowsIdentity identity = (WindowsIdentity)HttpContext.Current.User.Identity();
using (identity.Impersonate())
{
// ... code to call application B goes here ...
}
私が読んだ複数のIDの場合、これをweb.configに追加しようとしました。
<deny users="?"/>
誰かアイデアはありますか?