네임 스페이스로 루트 요소를 처리하고 라이브러리 xml-crypto에 대한 참조를 제공하려고합니다 .
나는 경로를 올바르게 제공하지 않고 있습니다. 조언하십시오. 목표는 태그 바로 뒤에 서명을 삽입 할 수 있도록 문서에 서명하는 것입니다.<samlp:Response
<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="efedb3b0-909f-4b39-b8c0-57427ee8dc83" Version="2.0" IssueInstant="2019-11-08T15:34:51.272Z">
<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">http://www.example.com</saml:Issuer>
</samlp:Response>
nodeJS 코드
var SignedXml = require('xml-crypto').SignedXml, fs = require('fs');
var sig = new SignedXml();
sig.addReference("//*[local-name(.)='samlp:Response']");
sig.signingKey = fs.readFileSync(__dirname + "/client.pem");
sig.computeSignature(xml);
fs.writeFileSync(__dirname + "/signed.xml", sig.getSignedXml());
시도
sig.addReference("//samlp:Response");
오류 : QName samlp를 해결할 수 없습니다.
하지만 https://www.freeformatter.com/xpath-tester.html 에서 잘 작동했습니다.
네임 스페이스를 무효화 / 우회하려면
sig.addReference("//*[local-name(.)='samlp:Response']");
...에
sig.addReference("//*[local-name()='Response']");
네임 스페이스 접두사 samlp
는 로컬 이름의 일부가 아니기 때문 Response
입니다.
XPath의 네임 스페이스에 대한 포괄적 인 답변 은 XPath가 XML 네임 스페이스를 어떻게 처리합니까?를 참조하십시오 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다