28

メッセージを送受信する非常に単純な WCF サービスを作成しました。VS 2008 の既定の Web サーバー ホストを介してアプリをテストしましたが、すべて正常に動作します。しかし、WCF サービスを別のコンピューターの IIS に展開すると、次のエラーが表示されます。

「認証に失敗したため、セキュリティ トークンの要求を満たすことができませんでした。」

構成ファイルでカスタムのユーザー名とパスワードを使用するように認証タイプを設定するにはどうすればよいですか? 不可能な場合は、使用している 2 台のコンピューターが同じユーザーを共有していないため、Windows 資格情報を設定する方法を教えてください。

4

4 に答える 4

31

バインディングのセキュリティをオフにする必要があります。それ以外の場合、デフォルトで、wsHttpBinding はセキュリティ コンテキスト トークン (SCT) のネゴシエーションを試みると思います。

そのため、バインディング構成セクションを指すようにエンドポイント定義を変更します。次に例を示します。

<endpoint address="" 
          binding="wsHttpBinding" 
          contract="HelloWorldService.IService1"
          bindingConfiguration="TheBindingConfig">

<services>そして、web.config のセクションのセクションの直後に、次のバインド構成のようなものを追加します<system.serviceModel>

<bindings>
  <wsHttpBinding>
    <binding name="TheBindingConfig">
      <security mode="None" />
    </binding>
  </wsHttpBinding>
</bindings>

セキュリティを「なし」に設定することが重要です。

これが役に立ったことを願っています!


上記は私を助けました-しかし、すぐには明らかではないのは、サービスエンドに追加する方法です(必要なことを実行したら明らかになりますが、実行するまではそうではありません)。完全に明白ではない理由は、デフォルトではバインディング セクションがないのに対し、クライアントにはバインディング セクションが存在する可能性があるためです。

したがって、非常に明確にするために、サービス エンドでバインディング セクションを追加し (上記で説明したように)、適切なエンドポイントに bindingConfiguration="TheBindingConfig" 属性を追加します。一度やったら一目瞭然…

于 2009-04-28T20:21:19.827 に答える
20

実際にセキュリティを無効にする必要はありません。場合によっては無効にする必要があります。bindingConfiguration 内では、次のようにセキュリティ コンテキストを確立しないメッセージ レベル セキュリティを指定できます。

<security mode="Message">
    <transport clientCredentialType="Windows" proxyCredentialType="None"
                        realm="" />
    <message clientCredentialType="Windows" negotiateServiceCredential="true"
        algorithmSuite="Default" establishSecurityContext="false" />
</security>

EstablishSecurityContext 属性に注意してください。クライアントとサービスの両方に、 EstablishSecurityContext が同じ値に設定されたセキュリティ構成が必要です。true の値でも正常に機能しますが、サーバーの負荷が分散されている環境では false をお勧めします。

于 2010-05-18T19:36:37.360 に答える
12

クライアントとサーバーの両方でこれを必ず設定してくださいbindingConfiguration(セキュリティ モード 'none' を指定)。そうしないと、このメッセージが表示されます。問題をデバッグする限り、これは非常に危険です。

メッセージを処理できませんでした。これは、アクション ' http://tempuri.org/IInterfaceName/OperationName ' が正しくないか、メッセージに無効または期限切れのセキュリティ コンテキスト トークンが含まれているか、バインディング間に不一致があるためである可能性があります。非アクティブのためにサービスがチャネルを中止した場合、セキュリティ コンテキスト トークンは無効になります。サービスがアイドル セッションを途中で中止しないようにするには、サービス エンドポイントのバインディングで受信タイムアウトを早めに増やします。

于 2009-12-27T08:39:22.763 に答える