Revision: 1983
Author: olavmrk
Date: Thu Nov 12 06:43:03 2009
Log: SAML2_AuthnRequest: Support for RequestedAuthnContext.
http://code.google.com/p/simplesamlphp/source/detail?r=1983
Modified:
/trunk/lib/SAML2/AuthnRequest.php
=======================================
--- /trunk/lib/SAML2/AuthnRequest.php Thu Nov 12 06:42:52 2009
+++ /trunk/lib/SAML2/AuthnRequest.php Thu Nov 12 06:43:03 2009
@@ -53,6 +53,18 @@
private $protocolBinding;
+ /**
+ * What authentication context was requested.
+ *
+ * Array with the following elements.
+ * - AuthnContextClassRef (required)
+ * - Comparison (optinal)
+ *
+ * @var array
+ */
+ private $requestedAuthnContext;
+
+
/**
* Constructor for SAML 2 authentication request messages.
*
@@ -94,7 +106,28 @@
$this->nameIdPolicy['AllowCreate'] =
SAML2_Utils::parseBoolean($nameIdPolicy, 'AllowCreate', FALSE);
}
}
-
+
+ $requestedAuthnContext =
SAML2_Utils::xpQuery($xml, './saml_protocol:RequestedAuthnContext');
+ if (!empty($requestedAuthnContext)) {
+ $requestedAuthnContext = $requestedAuthnContext[0];
+
+ $rac = array(
+ 'AuthnContextClassRef' => array(),
+ 'Comparison' => 'exact',
+ );
+
+ $accr =
SAML2_Utils::xpQuery($requestedAuthnContext,
'./saml_assertion:AuthnContextClassRef');
+ foreach ($accr as $i) {
+ $rac['AuthnContextClassRef'][] =
trim($i->textContent);
+ }
+
+ if ($requestedAuthnContext->hasAttribute('Comparison'))
{
+ $rac['Comparison'] =
$requestedAuthnContext->getAttribute('Comparison');
+ }
+
+ $this->requestedAuthnContext = $rac;
+ }
+
$idpEntries =
SAML2_Utils::xpQuery($xml,
'./saml_protocol:Scoping/saml_protocol:IDPList/saml_protocol:IDPEntry');
foreach($idpEntries as $idpEntry) {
@@ -244,6 +277,28 @@
$this->protocolBinding = $protocolBinding;
}
+
+
+ /**
+ * Retrieve the RequestedAuthnContext.
+ *
+ * @return array|NULL The RequestedAuthnContext.
+ */
+ public function getRequestedAuthnContext() {
+ return $this->requestedAuthnContext;
+ }
+
+
+ /**
+ * Set the RequestedAuthnContext.
+ *
+ * @param array|NULL $requestedAuthnContext The RequestedAuthnContext.
+ */
+ public function setRequestedAuthnContext($requestedAuthnContext) {
+ assert('is_array($requestedAuthnContext) ||
is_null($requestedAuthnContext)');
+
+ $this->requestedAuthnContext = $requestedAuthnContext;
+ }
/**
@@ -284,6 +339,20 @@
}
$root->appendChild($nameIdPolicy);
}
+
+ $rac = $this->requestedAuthnContext;
+ if (!empty($rac) && !empty($rac['AuthnContextClassRef'])) {
+ $e =
$this->document->createElementNS(SAML2_Const::NS_SAMLP,
'RequestedAuthnContext');
+ $root->appendChild($e);
+ if (isset($rac['Comparison']) && $rac['Comparison'] !==
'exact') {
+ $e->setAttribute('Comparison',
$rac['Comparison']);
+ }
+ foreach ($rac['AuthnContextClassRef'] as $accr) {
+ $i =
$this->document->createElementNS(SAML2_Const::NS_SAML, 'AuthnContextClassRef');
+
$i->appendChild($this->document->createTextNode($accr));
+ $e->appendChild($i);
+ }
+ }
if (count($this->IDPList) > 0) {
$scoping =
$this->document->createElementNS(SAML2_Const::NS_SAMLP, 'Scoping');
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"simpleSAMLphp commits" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/simplesamlphp-commits?hl=en
-~----------~----~----~----~------~----~------~--~---