2009-10-28 2 views
3

아래와 같은 WCF 바인딩을 사용하여 메시지 교환 중에 실제 사용자 이름 + 암호 (자격 증명)가 저장되는 위치에 대한 기술적 인 세부 정보를 찾고 있습니다.WCF 메시지 자격 증명 구현 정보

<bindings> 
    <wsHttpBinding> 
     <binding name="wsHttp"> 
      <security mode="TransportWithMessageCredential"> 
       <transport/> 
       <message clientCredentialType="UserName" 
         negotiateServiceCredential="false" 
         establishSecurityContext="true" /> 
      </security> 
     </binding> 
    </wsHttpBinding> 
</bindings> 

그런 다음 클라이언트 응용 프로그램 내에서 내가 먼저 내가 WCF 그것을이 데이터를 복용하고 SOAP 헤더에 퍼팅하지만 한 가정에서 너무

using (SupplierServiceClient client = new SupplierServiceClient()) { 
      client.ClientCredentials.UserName.UserName = "admin"; 
      client.ClientCredentials.UserName.Password = "password"; 

      SupplierList = client.GetSupplierCollection(); 
} 

같은 creds의 유효한 세트를 전달하는이 서비스를 호출 WSDL에서 그런 식으로 나타나지 않습니다 ... 어떤 도움이 필요합니까?

편집 : 아래

는 클라이언트에 대한 보안 구성이 생산 모습입니다

<security mode="TransportWithMessageCredential"> 
    <transport clientCredentialType="None" /> 
    <message clientCredentialType="UserName" establishSecurityContext="false" /> 
</security> 

답변

3

UserNameCredentials를 설정하면 실제로 사용자 이름 토큰 프로필을 활용하게됩니다. 그러면 토큰이 메시지에 SOAP 헤더로 추가됩니다. SOAP 헤더는 다음과 같습니다.

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" 
     xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
    <env:Header> 
     <wsse:UsernameToken> 
      <wsse:Username>jdoe</wsse:Username> 
      <wsse:Password>passw0rd</wsse:Password> 
      <wsse:Nonce><!-- optional nonce here --></wsse:Nonce> 
     </wsse:UsernameToken> 
    </env:Header> 
    <env:Body> 
     <!-- body here --> 
    </env:Body> 
</env:Envelope> 

이제 WSDL에 대해 언급하는 이유가 명확하지 않습니다. 토큰은 WSDL에 표시되지 않지만 WSDL에는 작업에 적절한 WS-Policy 주석이 포함되어야합니다. 이렇게하면 WSDL의 소비자는 실제로 UsernamePasswordToken을 요청에 보내야한다는 사실을 알게됩니다.

마지막으로 누군가가 RequestSecurityToken (RST)을 가져 왔지만 단순한 UsernameToken 인증을 사용하는 경우에는 RST가 필요하지 않습니다. WS-Trust를 사용하는 STS (Secure Token Server)와 토큰 교환을 수행하는 경우에만 RST가 참여해야합니다.

0
여기

샘플 SOAP 메시지처럼 보일 수 있습니다 방법은 다음과 같습니다

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing"> 
    <s:Header> 
    <a:Action s:mustUnderstand="1">http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue</a:Action> 
    <a:MessageID>urn:uuid:01d3a7d2-dc5a-42cf-acf0-3dd6bd50230e</a:MessageID> 
    <a:ReplyTo> 
     <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address> 
    </a:ReplyTo> 
    <a:To s:mustUnderstand="1">http://localhost:9999/Service1.svc</a:To> 
    </s:Header> 
    <s:Body> 
    <t:RequestSecurityToken Context="uuid-7c240c06-c14b-42af-82dd-10f44f423928-1" xmlns:t="http://schemas.xmlsoap.org/ws/2005/02/trust"> 
     <t:TokenType>http://schemas.xmlsoap.org/ws/2005/02/sc/sct</t:TokenType> 
     <t:RequestType>http://schemas.xmlsoap.org/ws/2005/02/trust/Issue</t:RequestType> 
     <t:KeySize>256</t:KeySize> 
     <t:BinaryExchange ValueType="http://schemas.xmlsoap.org/ws/2005/02/trust/spnego" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">YGsGBisGAQUFAqBhMF+gJDAiBgorBgEEAYI3AgIKBgkqhkiC9xIBAgIGCSqGSIb3EgECAqI3BDVOVExNU1NQAAEAAAC3shjiBgAGAC8AAAAHAAcAKAAAAAUBKAoAAAAPU0cyMjA1Nk1BVE1VVA==</t:BinaryExchange> 
    </t:RequestSecurityToken> 
    </s:Body> 
</s:Envelope> 
+0

우수 - 본문에서 "요청 보안 토큰"아래에 사용자 이름 + 비밀번호 또는? –

+0

RequestSecurityToken이 UsernameTokens에 관한이 질문과 관련이 있는지 확실하지 않습니다 ...? –

+0

이것은 보안 컨텍스트를 설정하는 데 사용되는 WS-Trust 핸드 셰이크의 첫 번째 부분 (요청) 일뿐입니다. 자세한 내용은 http://specs.xmlsoap.org/ws/2005/02/trust/ws-trust.pdf를 참조하십시오. –