28

WCFサービスを呼び出そうとすると、「メッセージのセキュリティの確認中にエラーが発生しました」というメッセージが表示されます。

カスタム認証を削除しても、サービスは問題なく機能します。web.configで何を誤って構成したのかわかりません。任意の洞察をいただければ幸いです。

  <system.serviceModel>
     <services>
        <service behaviorConfiguration="NAThriveExtensions.nableAPIBehavior"
          name="NAThriveExtensions.nableAPI">
           <endpoint 
             address="" 
             binding="basicHttpBinding" 
             bindingConfiguration="basicHttpBinding_Secure"
             contract="NAThriveExtensions.InableAPI">
           </endpoint>
           <endpoint 
             address="mex" 
             binding="mexHttpsBinding" 
             contract="IMetadataExchange" />
        </service>
     </services>
     <behaviors>
        <serviceBehaviors>
          <behavior name="NAThriveExtensions.nableAPIBehavior">
            <serviceMetadata httpsGetEnabled="true" />
            <serviceDebug includeExceptionDetailInFaults="false" />
            <serviceCredentials>
              <userNameAuthentication 
                userNamePasswordValidationMode="Custom" 
              customUserNamePasswordValidatorType= "NAThriveExtensions.Authentication, NAThriveExtensions" />
            </serviceCredentials>
          </behavior>
        </serviceBehaviors>
     </behaviors>
     <bindings>
       <basicHttpBinding>
         <binding name="basicHttpBinding_Secure">
           <security mode="TransportWithMessageCredential">
             <message clientCredentialType="UserName"/>
           </security>
         </binding>
       </basicHttpBinding>
     </bindings>
  </system.serviceModel>
4

8 に答える 8

40

これと同じエラー メッセージが表示されていましたが、ワークステーション マシンと WCF サービスをホストしているサーバーとの時間差が原因であることが判明しました。サーバーは私のマシンから約 10 分遅れており、WCF セキュリティはそれをあまり好まないようです。

根本的な問題を見つけるために、サーバーの構成ファイルでserviceSecurityAuditingをオンにしました。サービスの configuration/system.serviceModel/behaviors/serviceBehaviors/behavior セクションに以下を追加します。

<serviceSecurityAudit 
    auditLogLocation="Application" 
    serviceAuthorizationAuditLevel="Failure" 
    messageAuthenticationAuditLevel="Failure" 
    suppressAuditFailure="true"/>

これを理解するには、次のサイトが役に立ちました。

http://blogs.microsoft.co.il/blogs/urig/archive/2011/01/23/wcf-quot-an-error-occurred-when-verifying-security-for-the-message-quot-and-サービス セキュリティ監査.aspx

于 2013-03-07T23:10:27.033 に答える
19

このメッセージのもう 1 つの原因は、一部のマシンが時間内に同期されていない場合です。WCF では、既定で 5 分間のギャップが許可されます。これを超えると、物事が同期していない場合にエラーがスローされます。

解決策は、すべてのマシンを同期することです。time.windows.comは機能しないことで有名なので、別のものを使用することをお勧めします。(企業環境にいる場合は、ここではローカル ドメイン コントローラーが正しい選択かもしれません。)

于 2014-01-31T16:30:52.130 に答える
7

これは、サービス自体の問題ではなく、消費側の問題になりました。Software AG の webMethods 8 はこのサーバーを使用していましたが、サービスにセキュリティ ハンドラが追加されていなかったため、資格情報がヘッダーに追加されていなかったため、前述のエラーが発生しました。

于 2010-10-08T16:24:58.263 に答える
0

IIS 7.5 サーバーで同じエラーが発生しました。アプリ プールの仮想アカウント(例: IIS AppPool\ASP.NET v4.0)に、証明書の秘密キーに対する読み取りアクセス許可を追加するのを忘れていました。

参考までに、アカウントとアクセス許可のさまざまな組み合わせをテストしているときに、一度取得したキーへのアクセスを失うには、アプリ プールをリサイクルする必要があることに気付きました。

(0x80131501 - メッセージのセキュリティを確認中にエラーが発生しました。)

于 2013-04-08T05:57:30.340 に答える
0

同じエラーが発生していました。メンバーシップ データベース aspnetdb の読み取りアクセス許可を (IIS APPPOOL\DefaultAppPool) に追加するのを忘れていました。

メッセージ認証に失敗しました。サービス:....

アクション: http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT

クライアントID:

アクティビティ ID:

SqlException: ログインによって要求されたデータベース "aspnetdb" を開けません。ログインに失敗しました。

ユーザー 'IIS APPPOOL\DefaultAppPool' のログインに失敗しました。

于 2016-12-19T07:24:54.663 に答える