Токен контекста безопасности WCF - шифрование сообщения - PullRequest
0 голосов
/ 12 декабря 2018

Я хочу вызвать сервисное действие WCF (через PHP).Концепция такова: я запрашиваю токен контекста безопасности для правильного URI.Затем я получаю один, так что я должен иметь возможность вызвать требуемое действие службы с данным токеном.Я новичок в этой технологии, поэтому у меня есть несколько вопросов для этого процесса.(каждый XML имеет измененные адреса / учетные данные службы - скажем, соображения безопасности)

1. Имеет следующий XML-код, относящийся к RequestSecurityToken:

<s:Envelope
xmlns:s="http://www.w3.org/2003/05/soap-envelope"
xmlns:a="http://www.w3.org/2005/08/addressing"
xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<s:Header>
    <a:Action s:mustUnderstand="1">http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT</a:Action>
    <a:MessageID>urn:uuid:6b4f73e2-7d49-4ce5-bb4c-62a511244d0d</a:MessageID>
    <a:ReplyTo>
        <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
    </a:ReplyTo>
    <a:To s:mustUnderstand="1">https://some.service.com/WCFService/Service.svc</a:To>
    <o:Security s:mustUnderstand="1"
        xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
        <u:Timestamp u:Id="_0">
            <u:Created>2018-12-10T13:15:47.858Z</u:Created>
            <u:Expires>2018-12-10T13:20:47.858Z</u:Expires>
        </u:Timestamp>
        <o:UsernameToken u:Id="uuid-a26d97c6-ecd8-41f3-8e5a-71124a82ff74-1">
            <o:Username>username</o:Username>
            <o:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">password</o:Password>
        </o:UsernameToken>
    </o:Security>
</s:Header>
<s:Body>
    <t:RequestSecurityToken
        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:Entropy>
            <t:BinarySecret u:Id="uuid-6cc77ca1-4d0b-4bee-b019-6d5e932a8e95-1" Type="http://schemas.xmlsoap.org/ws/2005/02/trust/Nonce">6qFS3ahYQ+B5Iu7WrVP37lsPWJ2U4kOUc7Qx/QNWqvc=</t:BinarySecret>
        </t:Entropy>
        <t:KeySize>256</t:KeySize>
    </t:RequestSecurityToken>
</s:Body>

В RequestSecurityTokenесть элемент BinarySecret - как его сгенерировать?

2. Имеет следующий XML-код, который является ответом на запрос маркера безопасности:

<s:Envelope
xmlns:s="http://www.w3.org/2003/05/soap-envelope"
xmlns:a="http://www.w3.org/2005/08/addressing"
xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<s:Header>
    <a:Action s:mustUnderstand="1">http://schemas.xmlsoap.org/ws/2005/02/trust/RSTR/SCT</a:Action>
    <a:RelatesTo>urn:uuid:6b4f73e2-7d49-4ce5-bb4c-62a511244d0d</a:RelatesTo>
    <o:Security s:mustUnderstand="1"
        xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
        <u:Timestamp u:Id="_0">
            <u:Created>2018-12-10T13:15:47.270Z</u:Created>
            <u:Expires>2018-12-10T13:20:47.270Z</u:Expires>
        </u:Timestamp>
    </o:Security>
</s:Header>
<s:Body>
    <t:RequestSecurityTokenResponse
        xmlns:t="http://schemas.xmlsoap.org/ws/2005/02/trust">
        <t:TokenType>http://schemas.xmlsoap.org/ws/2005/02/sc/sct</t:TokenType>
        <t:RequestedSecurityToken>
            <c:SecurityContextToken u:Id="uuid-193d9634-81df-4bae-9472-bffc4fb3bb4e-2025"
                xmlns:c="http://schemas.xmlsoap.org/ws/2005/02/sc">
                <c:Identifier>urn:uuid:334ebcd5-b055-448f-8452-9d76e09273b3</c:Identifier>
            </c:SecurityContextToken>
        </t:RequestedSecurityToken>
        <t:RequestedAttachedReference>
            <o:SecurityTokenReference
                xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
                <o:Reference ValueType="http://schemas.xmlsoap.org/ws/2005/02/sc/sct" URI="#uuid-193d9634-81df-4bae-9472-bffc4fb3bb4e-2025"></o:Reference>
            </o:SecurityTokenReference>
        </t:RequestedAttachedReference>
        <t:RequestedUnattachedReference>
            <o:SecurityTokenReference
                xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
                <o:Reference URI="urn:uuid:334ebcd5-b055-448f-8452-9d76e09273b3" ValueType="http://schemas.xmlsoap.org/ws/2005/02/sc/sct"></o:Reference>
            </o:SecurityTokenReference>
        </t:RequestedUnattachedReference>
        <t:RequestedProofToken>
            <t:ComputedKey>http://schemas.xmlsoap.org/ws/2005/02/trust/CK/PSHA1</t:ComputedKey>
        </t:RequestedProofToken>
        <t:Entropy>
            <t:BinarySecret u:Id="uuid-193d9634-81df-4bae-9472-bffc4fb3bb4e-2026" Type="http://schemas.xmlsoap.org/ws/2005/02/trust/Nonce">F4Q0pSSYyvdHxDGB5Baobx/DUX/3LPAQUXooRbxGA/o=</t:BinarySecret>
        </t:Entropy>
        <t:Lifetime>
            <u:Created>2018-12-10T13:15:47.270Z</u:Created>
            <u:Expires>2018-12-11T04:15:47.270Z</u:Expires>
        </t:Lifetime>
        <t:KeySize>256</t:KeySize>
    </t:RequestSecurityTokenResponse>
</s:Body>

Что такоеактуальный токен?Как я должен использовать его в третьем XML (который является запросом действия службы)?Насколько я знаю, это должен быть hmac_sha1 - для этого нужен «секрет» - что это должно быть?Мне нужно это для генерации SignatureValue на третьем XML.Я пытался сгенерировать hmac_sha1 с идентификатором, возвращенным в ответе.Идентификаторы, с которыми я пытался сгенерировать hmac_sha1:

  • uuid-193d9634-81df-4bae-9472-bffc4fb3bb4e-2025
  • urn: uuid: 334ebcd5-b055-448f-8452-9d76e09273b3

Третий XML:

<s:Envelope
xmlns:s="http://www.w3.org/2003/05/soap-envelope"
xmlns:a="http://www.w3.org/2005/08/addressing"
xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<s:Header>
    <a:Action s:mustUnderstand="1">http://tempuri.org/IService/GetExampleResult</a:Action>
    <a:MessageID>urn:uuid:aa3bc39d-1490-4988-bc02-80df879f5067</a:MessageID>
    <a:ReplyTo>
        <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
    </a:ReplyTo>
    <a:To s:mustUnderstand="1">https://some.service.com/WCFService/Service.svc</a:To>
    <o:Security s:mustUnderstand="1"
        xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
        <u:Timestamp u:Id="_0">
            <u:Created>2018-12-10T13:15:49.319Z</u:Created>
            <u:Expires>2018-12-10T13:20:49.319Z</u:Expires>
        </u:Timestamp>
        <c:SecurityContextToken u:Id="uuid-193d9634-81df-4bae-9472-bffc4fb3bb4e-2025"
            xmlns:c="http://schemas.xmlsoap.org/ws/2005/02/sc">
            <c:Identifier>urn:uuid:334ebcd5-b055-448f-8452-9d76e09273b3</c:Identifier>
        </c:SecurityContextToken>
        <Signature
            xmlns="http://www.w3.org/2000/09/xmldsig#">
            <SignedInfo>
                <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
                <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#hmac-sha1"/>
                <Reference URI="#_0">
                    <Transforms>
                        <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
                    </Transforms>
                    <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
                    <DigestValue>nfENmBIOw+RQCpus5RWWylpmnJ4=</DigestValue>
                </Reference>
            </SignedInfo>
            <SignatureValue>Pw2JCsRMzAVHpILNlY1IjZNwb2o=</SignatureValue>
            <KeyInfo>
                <o:SecurityTokenReference>
                    <o:Reference ValueType="http://schemas.xmlsoap.org/ws/2005/02/sc/sct" URI="#uuid-193d9634-81df-4bae-9472-bffc4fb3bb4e-2025"/>
                </o:SecurityTokenReference>
            </KeyInfo>
        </Signature>
    </o:Security>
</s:Header>
<s:Body>
    <GetExampleResult
        xmlns="http://tempuri.org/"/>
    </s:Body>
</s:Envelope>

Данные XML были получены с помощью Fiddler при вызове сервиса через Visual Studio.Ответ на последний XML (который является фактическим запросом действия службы) был правильным, ожидаемым ответом.Если вы знаете, как помочь мне с этой удивительной технологией - WCF - и знаете ответы, пожалуйста, дайте мне знать.Я был бы благодарен.Большое спасибо, ура.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...