2010-05-27 25 views
5

Có cách nào để lấy thông tin về chứng chỉ ứng dụng khách nào được sử dụng trong phương thức dịch vụ web của tôi khi sử dụng <security mode="Transport> không? Tôi đã sàng lọc thông qua OperationContext.Current nhưng không thể tìm thấy bất cứ điều gì rõ ràng.Thông tin Chứng chỉ từ Dịch vụ WCF bằng chế độ bảo mật Giao thông vận tải

cấu hình máy chủ của tôi là như sau:

<basicHttpBinding> 
    <binding name="SecuredBasicBindingCert"> 
     <security mode="Transport"> 
     <message clientCredentialType="Certificate" /> 
     </security> 
    </binding> 
    </basicHttpBinding> 

Tôi đang làm việc với một quán rượu hệ thống bên thứ ba/sub người được may bằng DataPower để xác thực. Nó có vẻ như nếu tôi đang sử dụng WCF với cấu hình này, sau đó tôi không thể thu thập bất kỳ thông tin về người gọi (vì không có thông tin thực sự được gửi).

Tôi bằng cách nào đó cần phải tìm ra người thực hiện cuộc gọi đến dịch vụ của tôi mà không thay đổi cấu hình của tôi hoặc yêu cầu họ thay đổi tải trọng của họ.

+0

Tôi đang xem xét tận dụng địa chỉ của điểm cuối bằng cách thêm chuỗi truy vấn duy nhất vào địa chỉ của điểm cuối. QueryString có thể được đọc thông qua '((System.ServiceModel.Channels.HttpRequestMessageProperty) System.ServiceModel.OperationContext.Current.IncomingMessageProperties [System.ServiceModel.Channels.HttpRequestMessageProperty.Name]). QueryString' – Langdon

Trả lời

5

Có, nhưng không trực quan.

Trước tiên, hãy chắc chắn và tham khảo lắp ráp System.IdentityModel từ thư viện dịch vụ của bạn.

Bây giờ, thêm một cái gì đó tương tự như sau để phương pháp dịch vụ của bạn nơi bạn muốn biết về chứng chỉ khách hàng:

// Find the certificate ClaimSet associated with the client 
foreach (ClaimSet claimSet in OperationContext.Current.ServiceSecurityContext.AuthorizationContext.ClaimSets) 
{ 
    X509CertificateClaimSet certificateClaimSet = claimSet as X509CertificateClaimSet; 
    if (certificateClaimSet != null) 
    { 
     // We found the ClaimSet, now extract the certificate 
     X509Certificate2 certificate = certificateClaimSet.X509Certificate; 

     // Do something interesting with information contained in the certificate 
     Debug.Print("Certificate Subject: " + certificate.Subject); 
    } 
} 

Hope this helps!

+0

Cảm ơn câu trả lời, nhưng' OperationContext .Current.ServiceSecurityContext.AuthorizationContext' trống! Có lẽ IIS không cung cấp chứng chỉ cho WCF? – Langdon

+0

Hoặc có lẽ nó chỉ khả dụng khi ''? – Langdon

+0

Tôi không biết, nó hoạt động cho chúng tôi khi sử dụng bảo mật mức vận tải với ràng buộc net.tcp trong một kịch bản tự lưu trữ. Tôi không biết tại sao AuthorizationContext sẽ là null trong trường hợp của bạn. – luksan

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