Проблема с разбором ответа в powershell - PullRequest
0 голосов
/ 01 апреля 2020

Я запускаю веб-метод в powershell и возвращаюсь с ответом XML. Я не могу разобрать этот объект ответа для извлечения токена.

$response = Invoke-RestMethod 'https://sso-test.company.com/idp/sts.wst' -Method 'POST' -Headers $headers -Body $body

Ответ от него:

<S11:Envelope xmlns:S11="http://schemas.xmlsoap.org/soap/envelope/"><S11:Header><add:To xmlns:add="http://www.w3.org/2005/08/addressing">http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</add:To><add:Action xmlns:add="http://www.w3.org/2005/08/addressing">http://docs.oasis-open.org/ws-sx/ws-trust/200512/RSTRC/IssueFinal</add:Action><wsse:Security S11:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><wsu:Timestamp wsu:Id="bc41bf40-b714-4823-a440-4b75b7f5dbc1" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><wsu:Created>2020-03-31T20:32:52.484Z</wsu:Created><wsu:Expires>2020-03-31T20:37:52.484Z</wsu:Expires></wsu:Timestamp></wsse:Security></S11:Header><S11:Body><ns:RequestSecurityTokenResponseCollection xmlns:ns="http://docs.oasis-open.org/ws-sx/ws-trust/200512/"><ns:RequestSecurityTokenResponse><ns:TokenType>urn:ietf:params:oauth:grant-type:saml2-bearer</ns:TokenType><ns:RequestedSecurityToken><wsse:BinarySecurityToken EncodingType="http://tools.ietf.org/rfc/rfc4648.txt#base64url" wsu:Id="aaaaaaa" ValueType="urn:ietf:params:oauth:grant-type:saml2-bearer" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">**TOKENVALUE**</wsse:BinarySecurityToken></ns:RequestedSecurityToken><wsp:AppliesTo xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"><add:EndpointReference xmlns:add="http://www.w3.org/2005/08/addressing"><add:Address>https://company.xyz.com</add:Address></add:EndpointReference></wsp:AppliesTo></ns:RequestSecurityTokenResponse></ns:RequestSecurityTokenResponseCollection></S11:Body></S11:Envelope>

Мне нужно извлечь значение внутри узел / wsse: BinarySecurityToken. Но сталкиваются с проблемами. Любая помощь высоко ценится.

1 Ответ

0 голосов
/ 02 апреля 2020

Возможно, есть лучший способ сделать это, но:

$reponse.Split(">") | Where-Object { $_ -like "<wsse:BinarySecurityToken*" }

или, поместите его в массив, который вы можете циклически перемещать:

$array = ($reponse.Split(">") | Where-Object { $_ -like "<wsse:BinarySecurityToken*" }).Split(" ")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...