11<?php
2+
23/**
34 * Create a SAML authorization request.
45 */
5- class SamlAuthRequest
6+ class OneLogin_Saml_AuthRequest
67{
8+ const ID_PREFIX = 'ONELOGIN ' ;
9+
710 /**
811 * A SamlResponse class provided to the constructor.
12+ * @var OneLogin_Saml_Settings
913 */
10- private $ settings ;
14+ private $ _settings ;
1115
1216 /**
1317 * Construct the response object.
1418 *
15- * @param SamlResponse $settings
19+ * @param OneLogin_Saml_Settings $settings
1620 * A SamlResponse settings object containing the necessary
1721 * x509 certicate to decode the XML.
1822 */
19- function __construct ($ settings )
23+ public function __construct (OneLogin_Saml_Settings $ settings )
2024 {
21- $ this ->settings = $ settings ;
25+ $ this ->_settings = $ settings ;
2226 }
2327
2428 /**
2529 * Generate the request.
2630 *
27- * @return
28- * A fully qualified URL that can be redirected to in order to process
29- * the authorization request.
31+ * @return string A fully qualified URL that can be redirected to in order to process the authorization request.
3032 */
31- public function create ()
33+ public function getRedirectUrl ()
3234 {
33- $ id = $ this ->generateUniqueID ( 20 );
34- $ issue_instant = $ this ->getTimestamp ();
35+ $ id = $ this ->_generateUniqueID ( );
36+ $ issueInstant = $ this ->_getTimestamp ();
3537
36- $ request =
37- "<samlp:AuthnRequest xmlns:samlp= \"urn:oasis:names:tc:SAML:2.0:protocol \" ID= \"$ id \" Version= \"2.0 \" IssueInstant= \"$ issue_instant \" ProtocolBinding= \"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST \" AssertionConsumerServiceURL= \"" . $ this ->settings ->assertion_consumer_service_url . "\"> " .
38- "<saml:Issuer xmlns:saml= \"urn:oasis:names:tc:SAML:2.0:assertion \"> " . $ this ->settings ->issuer . "</saml:Issuer> \n" .
39- "<samlp:NameIDPolicy xmlns:samlp= \"urn:oasis:names:tc:SAML:2.0:protocol \" Format= \"" . $ this ->settings ->name_identifier_format . "\" AllowCreate= \"true \"></samlp:NameIDPolicy> \n" .
40- "<samlp:RequestedAuthnContext xmlns:samlp= \"urn:oasis:names:tc:SAML:2.0:protocol \" Comparison= \"exact \"> " .
41- "<saml:AuthnContextClassRef xmlns:saml= \"urn:oasis:names:tc:SAML:2.0:assertion \">urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef></samlp:RequestedAuthnContext> \n" .
42- "</samlp:AuthnRequest> " ;
38+ $ request = <<<AUTHNREQUEST
39+ <samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
40+ ID=" $ id"
41+ Version="2.0"
42+ IssueInstant=" $ issueInstant"
43+ ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
44+ AssertionConsumerServiceURL=" {$ this ->_settings ->spReturnUrl }">
45+ <saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"> {$ this ->_settings ->spIssuer }</saml:Issuer>
46+ <samlp:NameIDPolicy xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
47+ Format=" {$ this ->_settings ->requestedNameIdFormat }"
48+ AllowCreate="true"></samlp:NameIDPolicy>
49+ <samlp:RequestedAuthnContext xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" Comparison="exact">
50+ <saml:AuthnContextClassRef xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
51+ >urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef>
52+ </samlp:RequestedAuthnContext>
53+ </samlp:AuthnRequest>";
54+ AUTHNREQUEST ;
4355
44- $ deflated_request = gzdeflate ($ request );
45- $ base64_request = base64_encode ($ deflated_request );
46- $ encoded_request = urlencode ($ base64_request );
56+ $ deflatedRequest = gzdeflate ($ request );
57+ $ base64Request = base64_encode ($ deflatedRequest );
58+ $ encodedRequest = urlencode ($ base64Request );
4759
48- return $ this ->settings -> idp_sso_target_url . "?SAMLRequest= " . $ encoded_request ;
60+ return $ this ->_settings -> idpSingleSignOnUrl . "?SAMLRequest= " . $ encodedRequest ;
4961 }
5062
51- private function generateUniqueID ( $ length )
63+ private function _generateUniqueID ( )
5264 {
53- $ chars = "abcdef0123456789 " ;
54- $ chars_len = strlen ($ chars );
55- $ uniqueID = "" ;
56- for ($ i = 0 ; $ i < $ length ; $ i ++)
57- $ uniqueID .= substr ($ chars , rand (0 , 15 ), 1 );
58- return "_ " . $ uniqueID ;
65+ return self ::ID_PREFIX . sha1 (uniqid (mt_rand (), TRUE ));
5966 }
6067
61- private function getTimestamp ()
68+ private function _getTimestamp ()
6269 {
70+ $ defaultTimezone = date_default_timezone_get ();
6371 date_default_timezone_set ('UTC ' );
64- return strftime ("%Y-%m-%dT%H:%M:%SZ " );
72+ $ timestamp = strftime ("%Y-%m-%dT%H:%M:%SZ " );
73+ date_default_timezone_set ($ defaultTimezone );
74+ return $ timestamp ;
6575 }
66- }
67-
68- ;
76+ }
0 commit comments