2009-10-28 7 views
3

Я ищу некоторые технические подробности о том, где фактическое имя пользователя + пароль (учетные данные) хранятся во время обмена сообщениями, используя привязку WCF, как показано ниже.Детали реализации учетных данных WCF

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

Затем внутри клиентского приложения я называю эту услугу проходящее действительный набор кредитки как так

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

      SupplierList = client.GetSupplierCollection(); 
} 

Сначала я предположил, что WCF принимает эти данные и положить его в заголовок SOAP, но его не похоже, что из WSDL ... любая помощь?

Edit:

Ниже является то, что конфигурация безопасности для клиента выглядит как в производстве

<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), но не нужно (нужно) быть RST, если вы просто используете простую аутентификацию UsernameToken. Единственный раз, когда RST должен быть задействован, это если вы используете обмен токена с Secure Token Server (STS) с использованием WS-Trust.

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 –

Смежные вопросы