2016-05-17 6 views
0

Eigentlich habe ich eine CakePHP-Anwendung, die mit SimpleSAML mit WSO2 Identity Server authentifiziert (es leitet auf WSO2IS Login-Seite). Ich muss eine Seite in meiner Anwendung erstellen und die Informationen an WSO2IS senden, um den Benutzer zu authentifizieren. Wie kann ich es tun? Ich habe kein Beispiel dafür gefunden. Ich folgte diesem tutorial.PHP Authentifizierung Integration mit WOS2 Identity Server

Dateien in simplesaml: config/authsources.php

<?php 
$config = array(
    'wso2-sp' => array(
     'saml:SP', 
     'entityID' => 'IntranetSP', // I supposed that it is the ID of my Service Provider 
     'idp' => 'https://soa.rw1.local:9443/samlsso' 
    ) 
); 

?> 

Metadaten/saml20-IDP-remote.php

<?php 

$metadata['https://soa.rw1.local:9443/samlsso'] = array(

    'name' => array(

     'en' => 'WSO2 IS', 

     'no' => 'WSO2 IS', 

    ), 

    'description' => 'Login with WSO2 IS SAML2 IdP.', 

    'SingleSignOnService' => 'https://soa.rw1.local:9443/samlsso', 

    'SingleLogoutService' => 'https://soa.rw1.local:9443/samlsso', 

    'certFingerprint'  => '6bf8e136eb36d4a56ea05c7ae4b9a45b63bf975d' 



); 

?> 

In meinem WSO2 IS:

Service provider Configuration: 

Service Provider Name: IntranetSP 
Local & Outbound Authentication Configuration/Request Path Authentication Configuration: basic-auth 
+0

Sie können folgen [1] für Setup sso Identity Server mit einfachen Beispiel php [1] https://docs.wso2.com/display/IS500/SAML2+IdP+with+SimpleSAMLphp+Service+Provider –

+0

Die meisten Authentifikatoren, die die gleiche Arbeit verrichten, so dass Sie andere benutzerdefinierte Authentifikatoren beziehen können [1] [1] https://docs.wso2.com/display/ISCONNECTORS/Identity+Server+Authenticators+und+Connectors –

+0

@IsuraDilharaKarunaratne Ja, ich habe dieses Beispiel verwendet und es funktioniert .. Mein Problem ist, dass ich eine PHP-Login-Seite erstellen muss (es ist einfach) und WSO2 die Informationen zur Authentifizierung senden .. Eigentlich ist die Login-Seite in WSO2, also, Meine PHP-Anwendung leitet den Benutzer um eine WSO2-Anmeldeseite für die vollständige Authentifizierung. –

Antwort

0

In Konfigurieren Sie den Dienstanbieter unter Konfiguration für lokale und ausgehende Authentifizierung mit SP für Sie se Anfrage Pfad Authentifizierung.Für weitere Informationen hierzu, folgen Sie bitte this.

Folgendes ist ein Java-Code, wo Sie die Anfrage von einem Client senden können.

@Test(alwaysRun = true, description = "Test login success") 
public void testLoginSuccess() throws Exception { 
    HttpPost request = new HttpPost(TRAVELOCITY_SAMPLE_APP_URL + "/samlsso?SAML2.HTTPBinding=HTTP-POST"); 
    List<NameValuePair> urlParameters = new ArrayList<>(); 
    urlParameters.add(new BasicNameValuePair("username", adminUsername)); 
    urlParameters.add(new BasicNameValuePair("password", adminPassword)); 
    request.setEntity(new UrlEncodedFormEntity(urlParameters)); 
    HttpResponse response = client.execute(request); 
    BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
    String line; 
    String samlRequest = ""; 
    String secToken = ""; 

    while ((line = rd.readLine()) != null) { 
     if (line.contains("name='SAMLRequest'")) { 
      String[] tokens = line.split("'"); 
      samlRequest = tokens[5]; 
     } 
     if (line.contains("name='sectoken'")) { 
      String[] tokens = line.split("'"); 
      secToken = tokens[5]; 
     } 
    } 
    EntityUtils.consume(response.getEntity()); 
    request = new HttpPost(isURL + "samlsso"); 
    urlParameters = new ArrayList<>(); 
    urlParameters.add(new BasicNameValuePair("sectoken", secToken)); 
    urlParameters.add(new BasicNameValuePair("SAMLRequest", samlRequest)); 
    request.setEntity(new UrlEncodedFormEntity(urlParameters)); 
    response = client.execute(request); 
    String samlResponse = ""; 
    rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
    while ((line = rd.readLine()) != null) { 
     if (line.contains("name='SAMLResponse'")) { 
      String[] tokens = line.split("'"); 
      samlResponse = tokens[5]; 
     } 
    } 
    Base64 base64Decoder = new Base64(); 
    samlResponse = new String(base64Decoder.decode(samlResponse)) 
    EntityUtils.consume(response.getEntity()); 
} 

Sie sollten dies in PHP erreichen, indem Sie die gleichen Anfragen senden.

Wenn Sie jedoch die Anmeldeseite ändern müssen, können Sie die wso2 IS-Anmeldeseite wie erwähnt here anpassen, ohne eine eigene Seite zu verwenden. Wenn Ihre Anforderung dies ist, empfehle ich Ihnen, dies zu tun, da dies Ihr Leben viel einfacher macht.

+0

Aber wie kann ich das in meiner PHP-Anwendung anwenden? Ich verwende bereits einen konfigurierten SP (ich verwende WSO2IS 5.0.0) –

+0

Ist es nicht möglich, den SP zu aktualisieren, müssen Sie die Authentifizierung des Anforderungspfads in Ihrem SP aktivieren. Andernfalls muss der Benutzer die Anmeldeinformationen in IS eingeben Login-Seite. –

+0

Ich readed den Link, aber es gibt keine Erklärung über die Konfiguration der SimpleSaml in PHP, nur wie in IS konfigurieren. Ich habe in IS ein Service Provider, wie im Tutorial (hinzugefügt die Basic-Auth in Request Path Auth Konf - Local & Out ...) hinzugefügt, aber jetzt weiß ich nicht, wie kann ich meine SimpleSAML konfigurieren. Ich bearbeite meine Frage und setze meine conf Dateien ein –