2014-06-24 14 views
9

Tôi hiện đang sử dụng Máy chủ Nhận dạng Phiên bản 2.4 và Windows Identity Server để bảo mật liên lạc giữa ứng dụng .net và máy chủ sử dụng mã thông báo đã phát hành.WIF (sử dụng Máy chủ Nhận diện của Thinktecture) và Kênh WCF Duplex

Tôi làm việc này qua kênh WCF NET TCP chuẩn bằng cách phơi bày điểm cuối được liên kết và sử dụng phương pháp "CreateChannelWithIssuedToken (SecurityToken)" của nhà máy kênh để cung cấp mã bảo mật được trả về từ yêu cầu Phát hành.

Tuy nhiên dường như không có phương pháp tương đương cho DuplexChannelFactory cho phép chúng tôi chuyển vào ngữ cảnh Instance. Tôi đã đọc bài viết này - http://msdn.microsoft.com/en-us/library/cc668765(v=vs.110).aspx - chi tiết cách tạo liên kết song công để đạt được điều này, tuy nhiên khi tạo kênh, tôi không thể thấy cách đặt mã thông báo bảo mật trên kênh.

Có thuộc tính IssuedToken - http://msdn.microsoft.com/en-us/library/system.servicemodel.description.clientcredentials.issuedtoken(v=vs.110).aspx - trên thông tin đăng nhập của khách hàng, tuy nhiên chỉ đọc được.

Có ai đã đạt được bảo mật liên kết trên kênh song công bằng cách sử dụng chế độ bảo mật thư TCP có thể đưa ra một số lời khuyên không?

Trả lời

3

Mặc dù tự tạo kênh và tự phát hành mã thông báo với STS không đúng, bạn có thể tận dụng khung công tác WIF để thực hiện việc này cho bạn.

Nếu bạn định cấu hình ứng dụng khách thông qua cấu hình để biết STS, khung sẽ tự truy xuất mã thông báo bằng thông tin đăng nhập bạn đã đặt trên kênh. Sau đó, khung sẽ đặt thuộc tính "IssuedToken" trên thông tin đăng nhập của kênh.

<ws2007HttpBinding> 
    <binding name="ws"> 
     <security mode="TransportWithMessageCredential"> 
     <message establishSecurityContext="false" 
      negotiateServiceCredential="true" 
       clientCredentialType="UserName" /> 
     </security> 
    </binding> 
</ws2007HttpBinding> 
<customBinding> 
    <binding name="FederationDuplexTcpMessageSecurityBinding"> 
     <reliableSession /> 
     <security authenticationMode="SecureConversation"> 
      <secureConversationBootstrap authenticationMode="IssuedTokenForSslNegotiated"> 
       <issuedTokenParameters> 
        <issuer address="https://IdentityServer.domain/issue/wstrust/mixed/username" binding="ws2007HttpBinding" bindingConfiguration="ws" /> 
        <issuerMetadata address="https://IdentityServer.domain/issue/wstrust/mex" /> 
        <additionalRequestParameters> 
         <wsp:AppliesTo xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"> 
          <EndpointReference xmlns="http://www.w3.org/2005/08/addressing"> 
           <Address>RelyingParty.com</Address> 
          </EndpointReference> 
         </wsp:AppliesTo> 
        </additionalRequestParameters> 
       </issuedTokenParameters> 
      </secureConversationBootstrap> 
     </security> 
    <tcpTransport /> 
    </binding> 
</customBinding> 

Đoạn mã trên cho thấy cách bạn có thể tạo kênh song công bằng cách sử dụng Cuộc trò chuyện bảo mật và secureConversationBootstrap để quản lý bảo mật liên kết.

Một lợi thế của việc này là bạn cũng có thể thiết lập URI của bên phụ thuộc của riêng bạn, vì vậy bạn không phải sử dụng điểm cuối WCF làm định danh của bên phụ thuộc của bạn.

Bạn cũng sẽ cần phải thiết lập các hành vi dịch vụ liên để cho phép WIF như sau (useIdentityConfiguration là quan trọng, vì nó biến WIF trên):

<behavior name="FederatedServiceBehaviour"> 
    <clientCredentials useIdentityConfiguration="true" supportInteractive="false" > 
    <serviceCertificate/> 
    </clientCredentials> 
</behavior> 

lập endpoint dịch vụ được ghi nhận ở đây: http://msdn.microsoft.com/en-us/library/cc668765(v=vs.110).aspx (đến một mức độ)

Theo tôi có thể thấy bản thân DuplexChannelFactory không có phương pháp tạo kênh với mã thông báo đã phát hành trong khi đi qua ngữ cảnh cá thể.

Hy vọng điều này sẽ hữu ích!

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