wcf - 활성화 - 클릭 원스 보안 경고




메시지의 보안을 확인할 때 오류가 발생했습니다. (5)

사용자 이름과 암호는 연결 한 서버 이며 시스템 로그인 사용자 이름과 암호는 아닙니다.

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>

같은 오류가 발생했습니다. aspnetdb 멤버 자격 데이터베이스에 대한 읽기 권한을 (IIS APPPOOL \ DefaultAppPool)에 추가하는 것을 잊었습니다.

메시지 인증에 실패했습니다. 서비스:....

액션 : http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT

ClientIdentity :

활동 ID :

SqlException : 로그인에서 요청한 데이터베이스 "aspnetdb"를 열 수 없습니다. 로그인에 실패했습니다.

사용자 'IIS APPPOOL \ DefaultAppPool'에 대한 로그인에 실패했습니다.


나는 똑같은 오류를 겪고 있었고 위의 도움은 전혀 없었다.

마침내 상위 web.config (내 서비스는 관리 사이트에 하위 응용 프로그램에 배포 됨)의 connectionStrings까지 추적했습니다.

네, 어리석은 소리지만 최대한 빨리 내가 ​​위치 요소와 함께 부모 web.config에 연결 문자열을 감쌌다 모든 일을 시작했다.

명확성을 위해 부모 web.config에서 이것을 변경했습니다.

<connectionStrings>
    <add name="..." />
</connectionStrings>

이에

<location path="." inheritInChildApplications="false">
    <connectionStrings>
        <add name="..." />
    </connectionStrings>
</location>

이 오류가 매우 도움이되지 않는 serviceSecurityAudit 로그 메시지가 serviceSecurityAudit 유의하십시오.

메시지 인증에 실패했습니다.
서비스 : ...
액션 : http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT
ClientIdentity :
활동 ID :
ArgumentNullException : 값은 null 일 수 없습니다.
매개 변수 이름 : 관리자


나는이 동일한 오류 메시지를 받고 있었고 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-service-security-audit.aspx


이 메시지의 또 다른 원인은 일부 시스템이 시간에 동기화되지 않은 경우입니다. WCF는 기본적으로 5 분 간격을 허용합니다. 이 외에도 상황이 일치하지 않으면 오류가 발생합니다.

해결책은 모든 컴퓨터를 동기화하는 것입니다. time.windows.com 은 일하지 않는 것으로 악명이 높습니다. 그래서 다른 것을 사용하는 것이 좋습니다. 회사 환경에있는 경우 로컬 도메인 컨트롤러가 올바른 선택 일 수 있습니다.