2016-07-29 30 views
3

Ich versuche, einen Dienstanbieter einzurichten, der WSO2 IS für die Authentifizierung über SAML2 verwendet. Nun haben wir einen Anwendungsfall, in dem der Benutzer eine Maschine (d. H. Ein externes Programm) ist, die auf den Dienstanbieter zugreifen muss. Da es sich bei dem Benutzer um eine Maschine handelt, gibt es keinen Browser und kann das WSO2-Anmeldeformular nicht zur Durchführung der Authentifizierungsschritte verwenden, obwohl ihm ein Benutzername und ein Passwort zugewiesen wurden, da es sich immer noch um einen Benutzer handelt.Authentifizierung gegen WSO2 Identity Server ohne Browser und Abfrage der SAML2-Assertion-Nachricht

Meine Frage ist, wie kann dieser Nicht-GUI-Benutzer am SAML2-Workflow teilnehmen (speziell Anmeldeinformationen an WSO2 übergeben, um eine SAMLV2-Assertion-Nachricht zu erhalten) und auf den Dienstanbieter zugreifen?

Ich habe versucht, den folgenden als Simulation zu tun, aber ich nicht

1) curl -v -k http://localhost:8000/service_provider/login 
2) Extracting the SAML message from the response: 
    curl --user username:password -v -k https://localhost:9443/samlsso?SAMLRequest=<ENCODED_REQUEST> 

Im Grunde war ich erwarte eine Antwort zum Umleiten von WSO2 zurück zum Service-Provider mit SAML-Assertion Nachricht zu bekommen, sondern ich habe Folgendes: https://localhost:9443/authenticationendpoint/login.do;jsessionid=7QON18982323HWIH?commonAuthCallerPath=%2Fsamlsso&forceAuth=false&passiveAuth=false&tenantDomain=carbon.super&sessionDataKey=122JhQ-JQOJ-H8123&relyingParty=test-saml2&type=samlsso&sp=test&isSaaSApp=false&authenticators=BasicAuthenticator:LOCAL, das ist die gleiche URL, die verwendet wird, wenn ein menschlicher Benutzer mit einem Browser authentifiziert.

Ich habe auch versucht, HTTP-POST-Bindung mit "Sectoken" Formular-Param wie in diesem Artikel vorgeschlagen: http://xacmlinfo.org/2015/02/12/sso-without-identity-provider-login-page/. Aber es hat auch nicht funktioniert.

Ich habe auch versucht, SOAP-Anfragen an WSO2 AuthenticationAdminHttpsSoap12Endpoint Service, insbesondere die "Login" -Methode. Ich benutzte die JSESSIONID, die ich von der SOAP-Antwort zu den obigen Schritten erhielt, aber der Effekt war der selbe. Das ist keine Überraschung für mich, da WSO2 JSESSIONID nicht verwendet, um zu überprüfen, ob Sie bereits authentifiziert sind (zumindest nicht, um SAML-Antworten zu erhalten).

Antwort

0
1.Get login form 

Request 
curl -v http://localhost:8000/service_provider/login 

Response 
Extract SAMLRequest and SSOAuthSessionID (if RelayState presents extract it too) 

2.Send saml request to IDP using extracted valuses in step1(In browser this will happen through redirection) 

Request 
Endpoint : https://<is_host>:9443/samlsso 
Verb :post 
Content-Type:application/x-www-form-urlencoded 
Parameters:[ 
SAMLRequest:<value from previous step>, 
SSOAuthSessionID:<value from previous step>, 
RelayState :<value from previous step>] 

Response 
This will give IS login page.Extract sessionDataKey from that. 

3. Login by providing user name password 

Reqeust 
Endpoint:https://<is_host>:9443/commonauth 
Content-Type:application/x-www-form-urlencoded 
Verb :post 
Parameters: [tocommonauth:true,username:xxxx,password:xxx,sessionDataKey:<extracted from previous step>] 

Response 
Extract SAML response 

5.Post the saml resposne to ACS url of service provider