Authen-NZRealMe
view release on metacpan or search on metacpan
t/39-icms-req.t view on Meta::CPAN
#!perl
#
# Generate an iCMS request document that contains an 'opaque token' and has a
# multi-reference signature. Check it's structure and signature.
#
use strict;
use warnings;
use Test::More;
require XML::LibXML;
require XML::LibXML::XPathContext;
use FindBin;
use File::Spec;
use lib File::Spec->catdir($FindBin::Bin, 'test-lib');
use AuthenNZRealMeTestHelper;
use Authen::NZRealMe;
use Authen::NZRealMe::CommonURIs qw(URI NS_PAIR);
Authen::NZRealMe->register_class(service_provider => 'MockSP');
my $dispatcher = 'Authen::NZRealMe';
my $sig_class = $dispatcher->class_for('xml_signer');
my $sp_key_file = test_conf_file('sp-sign-key.pem');
my $sp_cert_file = test_conf_file('sp-sign-crt.pem');
my @all_ns = (
[ soap12 => 'http://www.w3.org/2003/05/soap-envelope' ],
[ wsse => 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' ],
[ wsu => 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd' ],
[ wst => 'http://docs.oasis-open.org/ws-sx/ws-trust/200512' ],
[ wsa => 'http://www.w3.org/2005/08/addressing' ],
[ icms => 'urn:nzl:govt:ict:stds:authn:deployment:igovt:gls:iCMS:1_0' ],
[ ds => 'http://www.w3.org/2000/09/xmldsig#' ],
);
my $conf_dir = test_conf_dir();
my $sp = Authen::NZRealMe->service_provider(
conf_dir => $conf_dir,
type => 'assertion',
);
ok(1, 'loaded required modules');
my $opaque_token = '[[OPAQUE-TOKEN-GOES-HERE]]';
my $req_builder = Authen::NZRealMe->class_for('icms_resolution_request');
my $req = $req_builder->new($sp, $opaque_token);
my $icms_req = $req->request_data;
ok($icms_req, 'generated an icms request document');
my $verifier = $sig_class->new(pub_cert_file => $sp_cert_file);
my $selector = '//ds:Signature[not(ancestor::soap12:Body)]';
ok(
$verifier->verify($icms_req, $selector, NS_PAIR('soap12')),
"verified request signature using SP's public key"
);
my $parser = XML::LibXML->new();
my $doc = $parser->parse_string($icms_req);
my $xc = XML::LibXML::XPathContext->new($doc->documentElement);
$xc->registerNs( @$_ ) foreach @all_ns;
my($node) = eval {
$verifier->find_verified_element($xc, '//soap12:Header');
};
ok(!$node, "failed to find SOAP Header element");
like($@, qr{not in a signed fragment}, ' because it is outside signed areas');
($node) = eval {
$verifier->find_verified_element($xc, '//soap12:Header/wsa:Action');
};
is($@, '', 'wsa:Action inside SOAP Header is verified');
is(
$node->to_literal,
'http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Validate',
' and has expected content'
);
($node) = eval {
$verifier->find_verified_element($xc, '//soap12:Header/wsa:To');
};
is($@, '', 'wsa:To inside SOAP Header is verified');
is(
$node->to_literal,
'https://ws.test.logon.fakeme.govt.nz/icms/Validate_v1_1',
' and has expected content'
);
($node) = eval {
$verifier->find_verified_element($xc, '//soap12:Header/wsa:ReplyTo/wsa:Address');
};
is($@, '', 'wsa:ReplyTo/wsa:Address inside SOAP Header is verified');
is(
( run in 1.071 second using v1.01-cache-2.11-cpan-71847e10f99 )