src/Auth/OnlineFederation.php
protected function getSTSUrl( $login ) {
        $content = [ 'login' => $this->settings->username, 'xml' => 1 ];

        $cURLHandle = curl_init();
        curl_setopt( $cURLHandle, CURLOPT_URL, 'https://login.microsoftonline.com/GetUserRealm.srf' );
        curl_setopt( $cURLHandle, CURLOPT_RETURNTRANSFER, 1 );
        curl_setopt( $cURLHandle, CURLOPT_TIMEOUT, Client::getConnectorTimeout() );

        if ( $this->settings->caPath ) {
            curl_setopt( $cURLHandle, CURLOPT_CAINFO, $this->settings->caPath );
        }

        if ( $this->settings->ignoreSslErrors ) {
            curl_setopt( $cURLHandle, CURLOPT_SSL_VERIFYPEER, 0 );
            curl_setopt( $cURLHandle, CURLOPT_SSL_VERIFYHOST, 0 );
        }

        curl_setopt( $cURLHandle, CURLOPT_SSLVERSION, defined( 'CURL_SSLVERSION_TLSv1_2' )? CURL_SSLVERSION_TLSv1_2 : 6 );

        if( $this->settings->proxy ) {
          curl_setopt( $cURLHandle, CURLOPT_PROXY, $this->settings->proxy );
        }

        curl_setopt( $cURLHandle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1 );
        curl_setopt( $cURLHandle, CURLOPT_HTTPHEADER, [ 'Content-Type: application/x-www-form-urlencoded' ] );
        curl_setopt( $cURLHandle, CURLOPT_POST, 1 );
        curl_setopt( $cURLHandle, CURLOPT_POSTFIELDS, http_build_query( $content ) );
        curl_setopt( $cURLHandle, CURLOPT_FOLLOWLOCATION, true ); // follow redirects
        curl_setopt( $cURLHandle, CURLOPT_POSTREDIR, 7 ); // 1 | 2 | 4 (301, 302, 303 redirects mask)
        curl_setopt( $cURLHandle, CURLOPT_HEADER, false );

        /* Execute the cURL request, get the XML response */
        $responseXML = curl_exec( $cURLHandle );

        /* Check for cURL errors */
        if ( curl_errno( $cURLHandle ) != CURLE_OK ) {
            throw new \Exception( 'cURL Error: ' . curl_error( $cURLHandle ) );
        }
        /* Check for HTTP errors */
        $httpResponse = curl_getinfo( $cURLHandle, CURLINFO_HTTP_CODE );
        $curlInfo = curl_getinfo( $cURLHandle );
        $curlErrNo = curl_errno( $cURLHandle );
        curl_close( $cURLHandle );

        if ( empty( $responseXML ) ) {
            throw new \Exception( 'Empty response from the GetUserRealm endpoint.' );
        }

        if ( strpos( $responseXML, '<IsFederatedNS>true</IsFederatedNS>' ) === false ) {
            return null;
        }

        preg_match( '~<STSAuthURL>(.*?)</STSAuthURL>~', $responseXML, $stsMatch );
        $authUri = $stsMatch[1];

        return preg_replace( '~^https?://(.*?)/.*$~', 'https://$1/adfs/services/trust/13/usernamemixed', $authUri );
    }
protected function getSTSUrl( $login ) {
        $content = [ 'login' => $this->settings->username, 'xml' => 1 ];

        $cURLHandle = curl_init();
        curl_setopt( $cURLHandle, CURLOPT_URL, 'https://login.microsoftonline.com/GetUserRealm.srf' );
        curl_setopt( $cURLHandle, CURLOPT_RETURNTRANSFER, 1 );
        curl_setopt( $cURLHandle, CURLOPT_TIMEOUT, Client::getConnectorTimeout() );

        if ( $this->settings->caPath ) {
            curl_setopt( $cURLHandle, CURLOPT_CAINFO, $this->settings->caPath );
        }

        if ( $this->settings->ignoreSslErrors ) {
            curl_setopt( $cURLHandle, CURLOPT_SSL_VERIFYPEER, 0 );
            curl_setopt( $cURLHandle, CURLOPT_SSL_VERIFYHOST, 0 );
        }

        curl_setopt( $cURLHandle, CURLOPT_SSLVERSION, defined( 'CURL_SSLVERSION_TLSv1_2' )? CURL_SSLVERSION_TLSv1_2 : 6 );

        if( $this->settings->proxy ) {
          curl_setopt( $cURLHandle, CURLOPT_PROXY, $this->settings->proxy );
        }

        curl_setopt( $cURLHandle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1 );
        curl_setopt( $cURLHandle, CURLOPT_HTTPHEADER, [ 'Content-Type: application/x-www-form-urlencoded' ] );
        curl_setopt( $cURLHandle, CURLOPT_POST, 1 );
        curl_setopt( $cURLHandle, CURLOPT_POSTFIELDS, http_build_query( $content ) );
        curl_setopt( $cURLHandle, CURLOPT_FOLLOWLOCATION, true ); // follow redirects
        curl_setopt( $cURLHandle, CURLOPT_POSTREDIR, 7 ); // 1 | 2 | 4 (301, 302, 303 redirects mask)
        curl_setopt( $cURLHandle, CURLOPT_HEADER, false );

        /* Execute the cURL request, get the XML response */
        $responseXML = curl_exec( $cURLHandle );

        /* Check for cURL errors */
        if ( curl_errno( $cURLHandle ) != CURLE_OK ) {
            throw new \Exception( 'cURL Error: ' . curl_error( $cURLHandle ) );
        }
        /* Check for HTTP errors */
        $httpResponse = curl_getinfo( $cURLHandle, CURLINFO_HTTP_CODE );
        $curlInfo = curl_getinfo( $cURLHandle );
        $curlErrNo = curl_errno( $cURLHandle );
        curl_close( $cURLHandle );

        if ( empty( $responseXML ) ) {
            throw new \Exception( 'Empty response from the GetUserRealm endpoint.' );
        }

        if ( strpos( $responseXML, '<IsFederatedNS>true</IsFederatedNS>' ) === false ) {
            return null;
        }

        preg_match( '~<STSAuthURL>(.*?)</STSAuthURL>~', $responseXML, $stsMatch );
        $authUri = $stsMatch[1];

        return preg_replace( '~^https?://(.*?)/.*$~', 'https://$1/adfs/services/trust/13/usernamemixed', $authUri );
    }
protected function getSTSUrl ( $ login ) { $ content = [ 'login' => $ this -> settings -> username , 'xml' => 1 ] ; $ cURLHandle = curl_init ( ) ; curl_setopt ( $ cURLHandle , CURLOPT_URL , 'https://login.microsoftonline.com/GetUserRealm.srf' ) ; curl_setopt ( $ cURLHandle , CURLOPT_RETURNTRANSFER , 1 ) ; curl_setopt ( $ cURLHandle , CURLOPT_TIMEOUT , Client :: getConnectorTimeout ( ) ) ; if ( $ this -> settings -> caPath ) { curl_setopt ( $ cURLHandle , CURLOPT_CAINFO , $ this -> settings -> caPath ) ; } if ( $ this -> settings -> ignoreSslErrors ) { curl_setopt ( $ cURLHandle , CURLOPT_SSL_VERIFYPEER , 0 ) ; curl_setopt ( $ cURLHandle , CURLOPT_SSL_VERIFYHOST , 0 ) ; } curl_setopt ( $ cURLHandle , CURLOPT_SSLVERSION , defined ( 'CURL_SSLVERSION_TLSv1_2' ) ? CURL_SSLVERSION_TLSv1_2 : 6 ) ; if ( $ this -> settings -> proxy ) { curl_setopt ( $ cURLHandle , CURLOPT_PROXY , $ this -> settings -> proxy ) ; } curl_setopt ( $ cURLHandle , CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 ) ; curl_setopt ( $ cURLHandle , CURLOPT_HTTPHEADER , [ 'Content-Type: application/x-www-form-urlencoded' ] ) ; curl_setopt ( $ cURLHandle , CURLOPT_POST , 1 ) ; curl_setopt ( $ cURLHandle , CURLOPT_POSTFIELDS , http_build_query ( $ content ) ) ; curl_setopt ( $ cURLHandle , CURLOPT_FOLLOWLOCATION , true ) ; // follow redirects curl_setopt ( $ cURLHandle , CURLOPT_POSTREDIR , 7 ) ; // 1 | 2 | 4 (301, 302, 303 redirects mask) curl_setopt ( $ cURLHandle , CURLOPT_HEADER , false ) ; /* Execute the cURL request, get the XML response */ $ responseXML = curl_exec ( $ cURLHandle ) ; /* Check for cURL errors */ if ( curl_errno ( $ cURLHandle ) != CURLE_OK ) { throw new \ Exception ( 'cURL Error: ' . curl_error ( $ cURLHandle ) ) ; } /* Check for HTTP errors */ $ httpResponse = curl_getinfo ( $ cURLHandle , CURLINFO_HTTP_CODE ) ; $ curlInfo = curl_getinfo ( $ cURLHandle ) ; $ curlErrNo = curl_errno ( $ cURLHandle ) ; curl_close ( $ cURLHandle ) ; if ( empty ( $ responseXML ) ) { throw new \ Exception ( 'Empty response from the GetUserRealm endpoint.' ) ; } if ( strpos ( $ responseXML , '<IsFederatedNS>true</IsFederatedNS>' ) === false ) { return null ; } preg_match ( '~<STSAuthURL>(.*?)</STSAuthURL>~' , $ responseXML , $ stsMatch ) ; $ authUri = $ stsMatch [ 1 ] ; return preg_replace ( '~^https?://(.*?)/.*$~' , 'https://$1/adfs/services/trust/13/usernamemixed' , $ authUri ) ; }
Retrieves the correct STS endpoint URL. Useful for federated AAD configurations.

@param $login string

@return null|string
@throws \Exception
Retrieves the correct STS endpoint URL . Useful for federated AAD configurations .