2010-09-21 24 views
21

Khi tôi cố gắng gọi dịch vụ WCF, tôi nhận được thông báo sau "Đã xảy ra lỗi khi xác minh bảo mật cho thư".Đã xảy ra lỗi khi xác minh bảo mật cho thư

Khi tôi xóa xác nhận tùy chỉnh, dịch vụ không hoạt động. Tôi không thể tìm ra mặc dù những gì tôi đã cấu hình sai trong web.config của tôi. Bất kỳ cái nhìn sâu sắc sẽ được đánh giá cao.

<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> 

Trả lời

7

Điều này đã kết thúc là một vấn đề ở phía tiêu thụ chứ không phải với chính dịch vụ đó. WebMethods 8 của Software AG đã tiêu thụ máy chủ này nhưng không có Trình xử lý bảo mật nào được thêm vào dịch vụ để các thông tin đăng nhập không được thêm vào tiêu đề do đó dẫn đến lỗi được đề cập ở trên.

+5

Làm cách nào để tìm hiểu xem đây có thực sự là vấn đề không? – Maritim

+0

@Maritim: Câu hỏi hay. Nhìn vào yêu cầu HTTP thô là cách tốt nhất tôi biết - ví dụ: bằng cách ghi lại nó nếu nó chưa được ghi lại: phần đầu SOAP bị thiếu (các phần tử của phần tử) nên được hiển thị rõ ràng. – J0e3gan

27

Tôi đã nhận được thông báo lỗi tương tự này và nó hóa ra là do sự khác biệt về thời gian giữa máy trạm làm việc của tôi và máy chủ lưu trữ dịch vụ WCF. Máy chủ đã được khoảng 10 phút sau máy tính của tôi và bảo mật WCF dường như không thích điều đó rất nhiều.

Để tìm vấn đề gốc tôi đã bật serviceSecurityAuditing trong tệp cấu hình của máy chủ. Thêm dòng sau vào cấu hình/System.ServiceModel/hành vi/serviceBehaviors/phần hành vi cho dịch vụ của bạn:

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

Trang web sau là hữu ích trong việc tìm ra này:

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

+7

Đây là mẹo chẩn đoán tuyệt vời! Cám ơn vì đã chia sẻ. – Tedford

+1

Đây thực sự là một mẹo tuyệt vời. Nó xuất hiện tôi đã thiếu một DLL, như mô tả ở đây: http://stackoverflow.com/questions/14033193/entity-framework-provider-type-could-not-be-loaded#comment29085393_15358941 – ArieKanarie

+1

Tôi ước gì tôi có thể upvote điều này nhiều hơn Một lần! Nửa ngày cố gắng để có được thông báo lỗi thực sự. –

0

tôi đã nhận được cùng một lỗi trên máy chủ IIS 7.5 của tôi. Tôi quên thêm quyền Đọc trên khóa riêng của chứng chỉ vào số app pool virtual account (ví dụ: IIS AppPool \ ASP.NET v4.0).

Để biết thông tin, trong khi thử nghiệm các kết hợp tài khoản và quyền khác nhau, tôi nhận thấy rằng hồ bơi ứng dụng cần được tái chế để mất quyền truy cập vào khóa, khi nó đã được truy lục một lần.

(0x80131501 -. Có lỗi xảy ra khi xác minh an ninh cho thông điệp)

15

Một nguyên nhân của thư này là khi một số máy của bạn chưa đồng bộ trong thời gian. WCF, theo mặc định, cho phép một khoảng cách năm phút; ngoài điều này, nó ném một lỗi nếu mọi thứ không đồng bộ.

Giải pháp là đồng bộ hóa tất cả các máy của bạn. time.windows.com nổi tiếng vì không hoạt động, vì vậy tôi khuyên bạn nên sử dụng cái gì khác. (Nếu bạn đang ở trong một môi trường doanh nghiệp, một bộ điều khiển tên miền cục bộ có thể là sự lựa chọn đúng ở đây.)

+4

Cảm ơn bạn rất nhiều! Tôi đã kéo tóc ra tự hỏi vấn đề này là gì !! – CodeCanuck

+0

Vui vì nó không chỉ là tôi @ Stealth22 :) – ashes999

+3

Máy chủ và máy khách của tôi ở cùng một đồng hồ. Đồng hồ máy khách được cấu hình tự động nhưng đồng hồ máy chủ được đặt thủ công. Tôi đã kích hoạt "Đặt thời gian tự động" trên máy chủ và giải quyết sự cố. – Oktay

-4

Tên người dùng và mật khẩu là máy chủ bạn kết nối, không tên đăng nhập hệ thống của bạn và mật khẩu.

0

Tôi đã gặp lỗi tương tự và không có sự trợ giúp nào ở trên cho tôi.

Cuối cùng tôi đã theo dõi nó xuống connectionStrings trong web.config mẹ (dịch vụ của tôi đã được triển khai cho ứng dụng con tới trang quản trị).

Có âm thanh vô lý, nhưng ngay sau khi tôi bọc các chuỗi kết nối trong web.config mẹ với một yếu tố vị trí tất cả bắt đầu làm việc.

Để rõ ràng, trong web.config cha mẹ, tôi đã thay đổi này

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

này

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

Lưu ý lỗi này cũng dẫn đến rất vô ích thông điệp này serviceSecurityAudit log:

Xác thực thư thất bại.
Dịch vụ: ...
Hành động: http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT
ClientIdentity:
ActivityId:
ArgumentNullException: Giá trị không thể null.
Tên thông số: người quản lý

0

Tôi đã gặp lỗi tương tự. Tôi quên thêm quyền Đọc trên cơ sở dữ liệu thành viên aspnetdb vào (IIS APPPOOL \ DefaultAppPool).

Xác thực thư không thành công. Dịch vụ: ....

Hành động: http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT

ClientIdentity:

ActivityId:

SqlException: Không thể cơ sở dữ liệu mở "aspnetdb" theo yêu cầu của đăng nhập. Đăng nhập thất bại.

Đăng nhập không thành công cho người dùng 'IIS APPPOOL \ DefaultAppPool'.

Các vấn đề liên quan