Code Monkey home page Code Monkey logo

spid-spring's Introduction

Build Status

spid-spring

Questo progetto rappresenta la risposta alla issue "Sviluppo estensione Java Spring per SPID #1" del team hack.developers 2017 di Lecce.

Il codice sorgente è suddiviso nei due seguenti moduli maven.

  1. spid-spring-integration è una libreria JAR che fornisce un supporto alle web application Spring che hanno la necessità di integrarsi in single sign-on con un Identity Provider SPID.
  2. spid-spring-rest è una applicazione Spring Boot che funge da proof of concept dell'estensione Java Spring per SPID implementata.

L'applicazione Spring Boot espone tre servizi REST per un ipotetico client che consentono di conoscere la lista degli Identity Provider ufficiali, di produrre una request da inviare ad uno specifico Identity Provider e infine di recuperare il contenuto dell response finale inviata dall'Identity Provider.

I dettagli dei due moduli maven sono riportati nei seguenti file README.md: spid-spring-integration e spid-spring-rest

TODO List

  • Completare il test della chiamata per la generazione della Authn Request.
  • Completare la chiamata per l'estrazione dei dati dell'utente dalla response dell'Identity Provider.

spid-spring's People

Contributors

alranel avatar davidepastore avatar dependabot[bot] avatar gvespucci avatar imgbotapp avatar libremente avatar lucastle avatar marque88 avatar matteobaccan avatar peppelinux avatar ruphy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

spid-spring's Issues

Elenco problematiche

Salve, sto cercando di far funzionare questo SDK per testare l'autenticazione tramite spid.
Nel fare ciò ho riscontrato una serie di problematiche:

I problemi nella richiesta sono:

  1. L'elemento isPassive è presente. Stando alle regole tecniche spid l'elemento isPassive NON deve essere presente (ad indicare il valore false). Ad esempio lo spid test env mostra un errore (anche se il valore dell'elemento è posto a false). Sarebbe preferibile non inserirlo proprio.
  2. Sempre stando alle regole tecniche, nell’elemento <AuthnRequest> deve essere presente solo UNO dei seguenti attributi: AssertionConsumerServiceIndex, AssertionConsumerServiceURL, ProtocolBinding. La richiesta generata da questo SDK li mette tutti. Lo spid test env mostra quindi un errore, segnalando la cosa.
  3. L'attributoFormat dell'elemento <Issuer> deve essere uguale a urn:oasis:names:tc:SAML:2.0:nameid-format:entity. Viene posto invece a urn:oasis:names:tc:SAML:2.0:nameid-format:transient.
  4. Questo SDK genera una richiesta per il livello di autorizzazione L2, ma non aggiunge l'attributo ForceAuthn nell'elemento <AuthnRequest> (richiesto per i livelli L2 e L3). Sarebbe anche preferibile lasciare scegliere a chi utilizza la libreria quale livello spid utilizzare (invece di hardcodare la stringa https://www.spid.gov.it/SpidL2)
  5. Nell'elemento <RequestedAuthnContext>, l'attributo Comparison viene impostato di default ad exact. Sarebbe preferibile scegliere come valore di default minimum. Citando le regole tecniche: "L’Identity Provider ha facoltà di utilizzare per l’autenticazione un livello SPID più alto rispetto a quelli risultanti dall’indicazione del richiedente mediante l’attributo Comparison. Tale scelta non deve comportare un esito negativo della richiesta". Cioè bisogna permette l'accesso anche a chi ha uno spid di livello superiore (es L3).
  6. Gli elementi <SignatureValue> e <DigestValue> sono vuoti. La richiesta non viene quindi firmata correttamente.
  7. Se si segue la richiesta POST, si deve solamente codificare in base64.
  8. Nel costruttore della classe AuthenticationInfoExtractor, viene hardcodato il valore https://spid.lecce.it. Per quale motivo?
  9. ? All'interno dell'elemento <KeyInfo>, vengono inseriti entrambi gli elementi <KeyValue> e <X509Data>. In teoria questo non dovrebbe essere un problema in sè. Chi utilizza il test env potrebbe incontrare un eccezione. Per maggiori informazioni vedere italia/spid-testenv2#325 e italia/spid-keycloak-provider#7

Ecco le soluzioni:
Per i problemi 1 e 2:

public AuthnRequest buildAuthenticationRequest(String assertionConsumerServiceUrl, Integer assertionConsumerServiceIndex, String issuerId, String id, String destination) {
  [...]
  AuthnRequest authRequest = authRequestBuilder.buildObject(SAML2_PROTOCOL, "AuthnRequest", "samlp");
  //authRequest.setIsPassive(false); // soluzione al problema 1
  authRequest.setIssueInstant(issueInstant);
  //authRequest.setProtocolBinding(SAML2_POST_BINDING); // soluzione al problema 2
  //authRequest.setAssertionConsumerServiceURL(assertionConsumerServiceUrl); // soluzione al problema 2
  authRequest.setAssertionConsumerServiceIndex(assertionConsumerServiceIndex);
  [...]
}

Per il problema 3:

private Issuer buildIssuer(String issuerId) {
  IssuerBuilder issuerBuilder = new IssuerBuilder();
  Issuer issuer = issuerBuilder.buildObject();
  issuer.setNameQualifier(issuerId);
  issuer.setFormat("urn:oasis:names:tc:SAML:2.0:nameid-format:entity"); // soluzione al problema 3
  issuer.setValue(issuerId);
  return issuer;
}

Per il problema 5:

private RequestedAuthnContext buildRequestedAuthnContext() {
  [...]
  RequestedAuthnContextBuilder requestedAuthnContextBuilder = new RequestedAuthnContextBuilder();
  RequestedAuthnContext requestedAuthnContext = requestedAuthnContextBuilder.buildObject();
  requestedAuthnContext.setComparison(AuthnContextComparisonTypeEnumeration.MINIMUM); // non EXACT
  requestedAuthnContext.getAuthnContextClassRefs().add(authnContextClassRef);
  [...]
}

Per il problema 6 vedere #10
Per il problema 7 ho sostituito l'intero metodo con questo:

public String encodeAndPrintAuthnRequest(AuthnRequest authnRequest) throws IntegrationServiceException {
  String requestMessage = printAuthnRequest(authnRequest);
  requestMessage = requestMessage.replace("\n", "").replace("\r", "");
  String encodedRequestMessage = Base64.getEncoder().encodeToString(requestMessage.getBytes());
  return encodedRequestMessage;
}

Risolti questi problemi, si ha un eccezione NullPointerException quando si prova a decodificare la SAMLResponse.

@Override
public ResponseDecoded processAuthenticationResponse(
	final HttpServletRequest request, final HttpServletResponse response)
			throws IntegrationServiceException {

  // TODO: configurazione SAML
  SAMLConfig saml2Config = new SAMLConfig();

Sfortunatamente non ho trovato soluzione a questo problema. Sembra sia dovuto al fatto che l'oggetto saml2Config non viene correttamente configurato (l'autore ha lasciato un TODO). Quindi al momento, con questo SDK, non si può decodificare la risposta ricevuta dall'idp.

Aprò un issue (e non una pull request) perché si tratta solamente di soluzioni "temporanee" che ho trovato. Pertanto dovrebbero essere controllate. Spero che in un giorno non troppo lontano questa repository venga sistemata.

Info generiche

Buon pomeriggio,
ho clonato i due progetti per iniziare dei test di integrazione.
Ho fondamentalmente due domande.

  1. la libreria può essere usata anche per interfacciarsi con CIE?
  2. i metodi esposti non gestiscono la chiamata effettiva verso l'IdP, come va gestota la response del metodo /auth-spid?
    va inviata in post verso l'idp?

DigestValue sha1 in AuthnRequest non accettato in validazione

Ciao a tutti,
noto che la generazione di una AuthnRequest inserisce l'elemento <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> di default. Ma, in fase di validazione, giustamente, questo fa andare in errore un controllo, riportando il seguente output: ERROR:spid_sp_test.authn_request:The digest algorithm MUST be one of [http://www.w3.org/2001/04/xmlenc#sha256, http://www.w3.org/2001/04/xmlenc#sha384, http://www.w3.org/2001/04/xmlenc#sha512].

Firma del certificato non corretta

Salve,
sto facendo i test con SPID-SAML-Check e la validazione del metadata mi dice che la signature non è corretta.
Ho generato il keystore con i seguenti comandi:

-	openssl req -x509 -nodes -sha256 -days 365 -newkey rsa:4096 -keyout sp-cert.key -out sp-cert.crt

-	Winpty openssl pkcs12 -export -inkey sp-cert.key -in sp-cert.crt -name <alias> -out cert.p12

-	Keytool -importkeystore -destkeystore keystore.jks -deststorepass password -srckeystore cert.p12  -srcstoretype pkcs12 -srcalias <alias> -destalias <alias> -destkeypass password

Ho implementato il codice per generare i valori digestvalue e signaturevalue usando :

KeyInfoHelper.buildX509Digest

certificate.getSignature()

ma i valori che vengono restituiti non risultano corretti.

Potreste aiutarmi a capire se è un problema applicativo o ho generato male il certificato e il keystore?

problemi con lo spid.testenv2 e SDK spid-spring

Buonasera,
lo spid-testenv2 mi da questo errore alla ricezione della AuthnRequest SAML:
UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 539-540: invalid continuation byte
Qualcuno sa dirmi dove può essere il problema?

I dati e le chiavi postati di seguito sono usati solo in sviluppo, non ci sono problemi con la loro condivisione.
Il service provider tenta l’autenticazione SPID producendo una pagina HTML autopostante come indicato nelle regole tecniche per SPID. Il progetto si basa sul la libreria https://github.com/italia/spid-spring.

Questa è la SAML codificata:
PHNhbWxwOkF1dGhuUmVxdWVzdCB4bWxuczpzYW1scD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnByb3RvY29sIiBBc3NlcnRpb25Db25zdW1lclNlcnZpY2VJbmRleD0iMCIgQXR0cmlidXRlQ29uc3VtaW5nU2VydmljZUluZGV4PSIwIiBEZXN0aW5hdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo4MDg4IiBJRD0icGZ4ZmU2YTMzNWItNWNkZS1lODhlLTZiNDEtZjc2MDRiZjY2MjI2IiBJc3N1ZUluc3RhbnQ9IjIwMjAtMDItMDdUMTY6NDI6MDUuNDE5WiIgVmVyc2lvbj0iMi4wIj4KPHNhbWwyOklzc3VlciB4bWxuczpzYW1sMj0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiIgRm9ybWF0PSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6bmFtZWlkLWZvcm1hdDplbnRpdHkiIE5hbWVRdWFsaWZpZXI9Imh0dHBzOi8vc3BpZC5jYXJ0c2MuZXUiPmh0dHBzOi8vc3BpZC5jYXJ0c2MuZXU8L3NhbWwyOklzc3Vlcj4KPGRzOlNpZ25hdHVyZSB4bWxuczpkcz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyI%2BCjxkczpTaWduZWRJbmZvPgo8ZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPgo8ZHM6U2lnbmF0dXJlTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxkc2lnLW1vcmUjcnNhLXNoYTI1NiIvPgo8ZHM6UmVmZXJlbmNlIFVSST0iI3BmeGZlNmEzMzViLTVjZGUtZTg4ZS02YjQxLWY3NjA0YmY2NjIyNiI%2BCjxkczpUcmFuc2Zvcm1zPgo8ZHM6VHJhbnNmb3JtIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI2VudmVsb3BlZC1zaWduYXR1cmUiLz4KPGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPgo8L2RzOlRyYW5zZm9ybXM%2BCjxkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNzaGEyNTYiLz4KPGRzOkRpZ2VzdFZhbHVlLz4KPC9kczpSZWZlcmVuY2U%2BCjwvZHM6U2lnbmVkSW5mbz4KPGRzOlNpZ25hdHVyZVZhbHVlLz4KPGRzOktleUluZm8%2BCjxkczpLZXlWYWx1ZT4KPGRzOlJTQUtleVZhbHVlPgo8ZHM6TW9kdWx1cz4ydGRkUG4xNHNLc1RZbjVXNTg3NGVva1dEM0VxL2c4cENONWxaRGlhR2dvRHpLZTl5VUdua0tLTDNCWE1EVWQ0YlJEdHh1VFNoZHQ0CkdyTXpGSjNWd0JNMnNHWm9wV2pCcHpoLzFGUHdOaVg0Ny9qM0tWZmN6dEtrN0xqcEdEeHNHMlBMY2p4aG9xT3VvVERxdmI1bEQ0b3MKT3IzWHh3UFhKemtIRjRIb0tOZXU4Y1RUcmVRVnpxaUxuTEJNMG9qZUN3WHZlMmJoTlV6VlIrR2ZFeU5UMThqVTJPbUE1cTJsVnJWYwpXd3lrNUJyUmxWZUQ3ZFJaeU4xVS9vSW4rZlgwUEUzaVp5YU1jV2tIL2Jhd203QVVsR25HSWpCeUlsYUdTMko3R1paYXBlVVRZalVsCnhqcmh0dHRPL2t3MEptMGQxbllXNWFsS0dVVmZNSFR0dVpvYU93PT08L2RzOk1vZHVsdXM%2BCjxkczpFeHBvbmVudD5BUUFCPC9kczpFeHBvbmVudD4KPC9kczpSU0FLZXlWYWx1ZT4KPC9kczpLZXlWYWx1ZT4KPGRzOlg1MDlEYXRhPgo8ZHM6WDUwOUNlcnRpZmljYXRlPk1JSUVFekNDQXZ1Z0F3SUJBZ0lVQ2xUL2FQVHdHNW1lS1Byb3RhWEVVNzF0NlJnd0RRWUpLb1pJaHZjTkFRRUxCUUF3Z1pneEN6QUoKQmdOVkJBWVRBa2xVTVE4d0RRWURWUVFJREFaSlZFRk1TVUV4RHpBTkJnTlZCQWNNQmxCbGMyRnliekVTTUJBR0ExVUVDZ3dKYkc5agpZV3hvYjNOME1SSXdFQVlEVlFRTERBbHNiMk5oYkdodmMzUXhFakFRQmdOVkJBTU1DV3h2WTJGc2FHOXpkREVyTUNrR0NTcUdTSWIzCkRRRUpBUlljY0dsbGNuQmhiMnh2TG5CbGNteHBibWxBYjNKallYSjBMbU52YlRBZUZ3MHlNREF5TURZeE5USTJOVEJhRncweU1UQXkKTURVeE5USTJOVEJhTUlHWU1Rc3dDUVlEVlFRR0V3SkpWREVQTUEwR0ExVUVDQXdHU1ZSQlRFbEJNUTh3RFFZRFZRUUhEQVpRWlhOaApjbTh4RWpBUUJnTlZCQW9NQ1d4dlkyRnNhRzl6ZERFU01CQUdBMVVFQ3d3SmJHOWpZV3hvYjNOME1SSXdFQVlEVlFRRERBbHNiMk5oCmJHaHZjM1F4S3pBcEJna3Foa2lHOXcwQkNRRVdISEJwWlhKd1lXOXNieTV3WlhKc2FXNXBRRzl5WTJGeWRDNWpiMjB3Z2dFaU1BMEcKQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUURhMTEwK2ZYaXdxeE5pZmxibnp2aDZpUllQY1NyK0R5a0kzbVZrT0pvYQpDZ1BNcDczSlFhZVFvb3ZjRmN3TlIzaHRFTzNHNU5LRjIzZ2Fzek1VbmRYQUV6YXdabWlsYU1Hbk9IL1VVL0EySmZqditQY3BWOXpPCjBxVHN1T2tZUEd3Ylk4dHlQR0dpbzY2aE1PcTl2bVVQaWl3NnZkZkhBOWNuT1FjWGdlZ28xNjd4eE5PdDVCWE9xSXVjc0V6U2lONEwKQmU5N1p1RTFUTlZINFo4VEkxUFh5TlRZNllEbXJhVld0VnhiREtUa0d0R1ZWNFB0MUZuSTNWVCtnaWY1OWZROFRlSm5Kb3h4YVFmOQp0ckNic0JTVWFjWWlNSElpVm9aTFluc1psbHFsNVJOaU5TWEdPdUcyMjA3K1REUW1iUjNXZGhibHFVb1pSVjh3ZE8yNW1obzdBZ01CCkFBR2pVekJSTUIwR0ExVWREZ1FXQkJSZ0E4TGdlK2VHaVBtV2JYWTdXV25zdStZZUh6QWZCZ05WSFNNRUdEQVdnQlJnQThMZ2UrZUcKaVBtV2JYWTdXV25zdStZZUh6QVBCZ05WSFJNQkFmOEVCVEFEQVFIL01BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRRFdxc1pJU0g3QQpaT1lCQkJOQ0pCZ1RVOXNmWWhybWtFTEg5STNocWlPemJvYmg5Z3JwYWtldzNkNUtBcU0wRnYycEJ6VkJ0TXVmbXQrNFI4c0lJTUk1CmF6TjhnNDBXbjBSZWpnOTNEWm1lMS9vNC9nZVh6REwvUWRkMXJxQld2eEo5ZndsblRvRHNZN0pxekFRR2xxL0ZIemxtSGRjcG9yVW0KZWw4M1o1SmNzQWErbW1zSFpQZHprelN3Uzd4dW9makF6WWcvdVRFQzE5UjZIeHdTSnc0UHF6NXpHZUdSYUlXbXB6aHdxOVd2enJUcQpmZ0VMRXBReXFVVkV0U1BOOVVKeTdEK2sraHM5SkUvR2NzbExIU0Y3Rk5veE9kcW5EVGI0cXNwNXRJSFRuVENNRmF2Mk9wUEZaL0ExCkpob2N2c1Z2NnZCVkhSMlMzMitQWVJ5U2FycHM8L2RzOlg1MDlDZXJ0aWZpY2F0ZT4KPC9kczpYNTA5RGF0YT4KPC9kczpLZXlJbmZvPgo8L2RzOlNpZ25hdHVyZT4KPHNhbWwycDpOYW1lSURQb2xpY3kgeG1sbnM6c2FtbDJwPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6cHJvdG9jb2wiIEZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOm5hbWVpZC1mb3JtYXQ6dHJhbnNpZW50Ii8%2BCjxzYW1sMnA6UmVxdWVzdGVkQXV0aG5Db250ZXh0IHhtbG5zOnNhbWwycD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnByb3RvY29sIiBDb21wYXJpc29uPSJleGFjdCI%2BCjxzYW1sOkF1dGhuQ29udGV4dENsYXNzUmVmIHhtbG5zOnNhbWw9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphc3NlcnRpb24iPmh0dHBzOi8vd3d3LnNwaWQuZ292Lml0L1NwaWRMMTwvc2FtbDpBdXRobkNvbnRleHRDbGFzc1JlZj4KPC9zYW1sMnA6UmVxdWVzdGVkQXV0aG5Db250ZXh0Pgo8L3NhbWxwOkF1dGhuUmVxdWVzdD4K

Di seguito riporto il codice che effettua la codifica nella classe SPIDIntegrationUtil:

public String encodeAndPrintAuthnRequest(AuthnRequest authnRequest, String binding) throws IntegrationServiceException {
	String requestMessage = printAuthnRequest(authnRequest);
	Deflater deflater = new Deflater(Deflater.DEFLATED, true);
	ByteArrayOutputStream byteArrayOutputStream = null;
	DeflaterOutputStream deflaterOutputStream = null;
	String encodedRequestMessage;
	try {
		byteArrayOutputStream = new ByteArrayOutputStream();
		/** Nel caso del binding HTTP-POST non è previsto l’encoding Deflate, ma solo Base64 */
		if (binding.indexOf(HTTP_POST) != -1) {
			byteArrayOutputStream = new ByteArrayOutputStream();
			byteArrayOutputStream.write(requestMessage.getBytes());
			byteArrayOutputStream.close();
		} else { 
			deflaterOutputStream = new DeflaterOutputStream(byteArrayOutputStream, deflater);
			deflaterOutputStream.write(requestMessage.getBytes()); // compressing
			deflaterOutputStream.close();
		}
		System.out.println("SAML no encode: " + byteArrayOutputStream.toString());
		encodedRequestMessage = Base64.encodeBytes(byteArrayOutputStream.toByteArray(), Base64.DONT_BREAK_LINES);
		encodedRequestMessage = URLEncoder.encode(encodedRequestMessage, "UTF-8").trim(); // encoding string
	}
	catch (UnsupportedEncodingException e) {
		log.error("encodeAndPrintAuthnRequest :: " + e.getMessage(), e);
		throw new IntegrationServiceException(e);
	}
	catch (IOException e) {
		log.error("encodeAndPrintAuthnRequest :: " + e.getMessage(), e);
		throw new IntegrationServiceException(e);
	}
	return encodedRequestMessage;
}

Questa è la SAML prima della codifica:

<samlp:AuthnRequest
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" AssertionConsumerServiceIndex="0" AttributeConsumingServiceIndex="0" Destination="http://localhost:8088" ID="pfxfe6a335b-5cde-e88e-6b41-f7604bf66226" IssueInstant="2020-02-07T16:42:05.419Z" Version="2.0">
<saml2:Issuer
	xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity" NameQualifier="https://spid.cartsc.eu">https://spid.cartsc.eu
</saml2:Issuer>
<ds:Signature
	xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
	<ds:SignedInfo>
		<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
		<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
		<ds:Reference URI="#pfxfe6a335b-5cde-e88e-6b41-f7604bf66226">
			<ds:Transforms>
				<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
				<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
			</ds:Transforms>
			<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
			<ds:DigestValue/>
		</ds:Reference>
	</ds:SignedInfo>
	<ds:SignatureValue/>
	<ds:KeyInfo>
		<ds:KeyValue>
			<ds:RSAKeyValue>
				<ds:Modulus>2tddPn14sKsTYn5W5874eokWD3Eq/g8pCN5lZDiaGgoDzKe9yUGnkKKL3BXMDUd4bRDtxuTShdt4GrMzFJ3VwBM2sGZopWjBpzh/1FPwNiX47/j3KVfcztKk7LjpGDxsG2PLcjxhoqOuoTDqvb5lD4osOr3XxwPXJzkHF4HoKNeu8cTTreQVzqiLnLBM0ojeCwXve2bhNUzVR+GfEyNT18jU2OmA5q2lVrVcWwyk5BrRlVeD7dRZyN1U/oIn+fX0PE3iZyaMcWkH/bawm7AUlGnGIjByIlaGS2J7GZZapeUTYjUlxjrhtttO/kw0Jm0d1nYW5alKGUVfMHTtuZoaOw==</ds:Modulus>
				<ds:Exponent>AQAB</ds:Exponent>
			</ds:RSAKeyValue>
		</ds:KeyValue>
		<ds:X509Data>
			<ds:X509Certificate>MIIEEzCCAvugAwIBAgIUClT/aPTwG5meKProtaXEU71t6RgwDQYJKoZIhvcNAQELBQAwgZgxCzAJBgNVBAYTAklUMQ8wDQYDVQQIDAZJVEFMSUExDzANBgNVBAcMBlBlc2FybzESMBAGA1UECgwJbG9jYWxob3N0MRIwEAYDVQQLDAlsb2NhbGhvc3QxEjAQBgNVBAMMCWxvY2FsaG9zdDErMCkGCSqGSIb3DQEJARYccGllcnBhb2xvLnBlcmxpbmlAb3JjYXJ0LmNvbTAeFw0yMDAyMDYxNTI2NTBaFw0yMTAyMDUxNTI2NTBaMIGYMQswCQYDVQQGEwJJVDEPMA0GA1UECAwGSVRBTElBMQ8wDQYDVQQHDAZQZXNhcm8xEjAQBgNVBAoMCWxvY2FsaG9zdDESMBAGA1UECwwJbG9jYWxob3N0MRIwEAYDVQQDDAlsb2NhbGhvc3QxKzApBgkqhkiG9w0BCQEWHHBpZXJwYW9sby5wZXJsaW5pQG9yY2FydC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa110+fXiwqxNiflbnzvh6iRYPcSr+DykI3mVkOJoaCgPMp73JQaeQoovcFcwNR3htEO3G5NKF23gaszMUndXAEzawZmilaMGnOH/UU/A2Jfjv+PcpV9zO0qTsuOkYPGwbY8tyPGGio66hMOq9vmUPiiw6vdfHA9cnOQcXgego167xxNOt5BXOqIucsEzSiN4LBe97ZuE1TNVH4Z8TI1PXyNTY6YDmraVWtVxbDKTkGtGVV4Pt1FnI3VT+gif59fQ8TeJnJoxxaQf9trCbsBSUacYiMHIiVoZLYnsZllql5RNiNSXGOuG2207+TDQmbR3WdhblqUoZRV8wdO25mho7AgMBAAGjUzBRMB0GA1UdDgQWBBRgA8Lge+eGiPmWbXY7WWnsu+YeHzAfBgNVHSMEGDAWgBRgA8Lge+eGiPmWbXY7WWnsu+YeHzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQDWqsZISH7AZOYBBBNCJBgTU9sfYhrmkELH9I3hqiOzbobh9grpakew3d5KAqM0Fv2pBzVBtMufmt+4R8sIIMI5azN8g40Wn0Rejg93DZme1/o4/geXzDL/Qdd1rqBWvxJ9fwlnToDsY7JqzAQGlq/FHzlmHdcporUmel83Z5JcsAa+mmsHZPdzkzSwS7xuofjAzYg/uTEC19R6HxwSJw4Pqz5zGeGRaIWmpzhwq9WvzrTqfgELEpQyqUVEtSPN9UJy7D+k+hs9JE/GcslLHSF7FNoxOdqnDTb4qsp5tIHTnTCMFav2OpPFZ/A1JhocvsVv6vBVHR2S32+PYRySarps</ds:X509Certificate>
		</ds:X509Data>
	</ds:KeyInfo>
</ds:Signature>
<saml2p:NameIDPolicy
	xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/>
	<saml2p:RequestedAuthnContext
		xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" Comparison="exact">
		<saml:AuthnContextClassRef
			xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">https://www.spid.gov.it/SpidL1
		</saml:AuthnContextClassRef>
	</saml2p:RequestedAuthnContext>
</samlp:AuthnRequest>

processAuthenticationResponse: verifica response ricevuta

Salve a tutti,
vorrei utilizzare il metodo "processAuthenticationResponse(final HttpServletRequest request, final HttpServletResponse response) ",
presente sotto il servizio "send-response-test", per validare la response ricevuta.
Purtroppo ho notato che questo cerca di recuperare dalla sessione l'oggetto AuthnRequest (xmlObject instanceof AuthnRequest)
ma io non ho una sessione attiva ne tantomeno i paramenti che lui ricerca.
Potreste aiutarmi a capire cosa mi manca e soprattutto come validare se una response ricevuta è autentica e completa?

Certo di un vostro riscontro, vi ringrazio.

Sviluppo estensione Java Spring per SPID

Ci sono due strade per implementare un'estensione SPID per Spring:

  1. usare un middleware come Shibboleth
  2. implementare tutto direttamente nel plugin (self-contained)

Per i dettagli sulle due possibili soluzioni si vedano le considerazioni scritte nell'analoga issue per SPID-Django.

Considerando che per Spring esiste un'ottima estensione per SAML (https://projects.spring.io/spring-security-saml/) l'ideale sarebbe scegliere la strada 2 (niente middleware) e basare l'implementazione su spring-security-saml. L'estensione dovrebbe includere i metadati degli IdP SPID e dovrebbe facilitare l'integrazione del bottone di login nella posizione desiderata.

Elemento SignatureValue vuoto

Salve quando provo a generare una richiesta, l'elemento <SignatureValue /> è vuoto. Questo causa il seguente errore durante la richiesta post diretta allo spid test env:
TypeError: argument should be a bytes-like object or ASCII string, not 'NoneType'

immagine

Un esempio di richiesta generata è il seguente:

<?xml version="1.0" encoding="UTF-8"?>
<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" AssertionConsumerServiceIndex="0" AttributeConsumingServiceIndex="1" Destination="http://localhost:8088/sso" ID="_53d4af8588354677b4f9cf383b4805c4" IssueInstant="2021-02-26T21:54:23.687Z" Version="2.0">
   <saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity" NameQualifier="http://localhost:8080">http://localhost:8080</saml2:Issuer>
   <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
      <ds:SignedInfo>
         <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
         <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
         <ds:Reference URI="#_53d4af8588354677b4f9cf383b4805c4">
            <ds:Transforms>
               <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
               <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
            </ds:Transforms>
            <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
            <ds:DigestValue />
         </ds:Reference>
      </ds:SignedInfo>
      <ds:SignatureValue />
      <ds:KeyInfo>
         <ds:KeyValue>
            <ds:RSAKeyValue>
               <ds:Modulus>vx4qAxptDe6NkHqXGUTRurYXLuXy5kja0x0So1JVQOOluKwtDHVrlcophtkCNr5TI1Vc6znGuwro
j6OKepo6PLsjPVWYZq+mLZKUyJ6/yFOPDDQwfsvNMxjZ28j6hFE+fPozQ2WPltQsRBOXipn/InhV
M1HM+tIwJ6+PK4eRJkaXo6aPD45ffYwlA21jZYp5hcjCGvwG8FNIZrUbLqjwppcY7vcN2LpiAm4t
ypachQzJOqKJx1F1UZE4wEE1H8yHZgtdo3wL0NGGZ5zRiV5ECjHvpz+EYckBL9DDpzFy95g7tn0S
zTcB/ktIQL4iKfnzezHl5jMBf8tJPn6ImOE69w==</ds:Modulus>
               <ds:Exponent>AQAB</ds:Exponent>
            </ds:RSAKeyValue>
         </ds:KeyValue>
         <ds:X509Data>
            <ds:X509Certificate>MIIEMDCCAxigAwIBAgIJAK8BDpV2YZ66MA0GCSqGSIb3DQEBCwUAMIGsMQswCQYDVQQGEwJJVDER
MA8GA1UECAwIVmVyY2VsbGkxETAPBgNVBAcMCFZlcmNlbGxpMRswGQYDVQQKDBJDb211bmUgZGkg
VmVyY2VsbGkxDTALBgNVBAsMBFNwaWQxHzAdBgNVBAMMFmNvbXVuZS52ZXJjZWxsaS5nb3YuaXQx
KjAoBgkqhkiG9w0BCQEWG3NwaWRAY29tdW5lLnZlcmNlbGxpLmdvdi5pdDAeFw0yMTAyMjYxNTU0
NDRaFw0yNDAyMjYxNTU0NDRaMIGsMQswCQYDVQQGEwJJVDERMA8GA1UECAwIVmVyY2VsbGkxETAP
BgNVBAcMCFZlcmNlbGxpMRswGQYDVQQKDBJDb211bmUgZGkgVmVyY2VsbGkxDTALBgNVBAsMBFNw
aWQxHzAdBgNVBAMMFmNvbXVuZS52ZXJjZWxsaS5nb3YuaXQxKjAoBgkqhkiG9w0BCQEWG3NwaWRA
Y29tdW5lLnZlcmNlbGxpLmdvdi5pdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL8e
KgMabQ3ujZB6lxlE0bq2Fy7l8uZI2tMdEqNSVUDjpbisLQx1a5XKKYbZAja+UyNVXOs5xrsK6I+j
inqaOjy7Iz1VmGavpi2SlMiev8hTjww0MH7LzTMY2dvI+oRRPnz6M0Nlj5bULEQTl4qZ/yJ4VTNR
zPrSMCevjyuHkSZGl6Omjw+OX32MJQNtY2WKeYXIwhr8BvBTSGa1Gy6o8KaXGO73Ddi6YgJuLcqW
nIUMyTqiicdRdVGROMBBNR/Mh2YLXaN8C9DRhmec0YleRAox76c/hGHJAS/Qw6cxcveYO7Z9Es03
Af5LSEC+Iin583sx5eYzAX/LST5+iJjhOvcCAwEAAaNTMFEwHQYDVR0OBBYEFDIUYHNbbiU61Tuw
v6GEJ+OM+eO1MB8GA1UdIwQYMBaAFDIUYHNbbiU61Tuwv6GEJ+OM+eO1MA8GA1UdEwEB/wQFMAMB
Af8wDQYJKoZIhvcNAQELBQADggEBAI/pCiIce1EJkSu8Nt/t8C2veVE9PlKKcVTIkk7FsEBPgOeN
y0iMvJzWeunj1/oJWl2EGVPQP1WCkv2wPipFyo4q3sudzK3yeIPRBrdllCqmtIEsQ/tb+fgNbVyP
EHQ0495eQlwOk4M6YIsmFRt4czKMF2RvgorXbWRCh1enLTkLsR8M3kA82olM0IOUH1KWTLr1df27
3GgJk6sCl5TF/xEhk9fGvvabM476t8ZnCktimvjTk9+ZvH0AIGHRrlcMpPrFSIOmCLnWV0hhMZCF
K0xRJhsKMZqmQmamL1MxLOC8Wuckqw29JQxNV2LqOXZzJ8DWQpG1+y07Y/Gnq4r7FoM=</ds:X509Certificate>
         </ds:X509Data>
      </ds:KeyInfo>
   </ds:Signature>
   <saml2p:NameIDPolicy xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient" />
   <saml2p:RequestedAuthnContext xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" Comparison="exact">
      <saml:AuthnContextClassRef xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">https://www.spid.gov.it/SpidL2</saml:AuthnContextClassRef>
   </saml2p:RequestedAuthnContext>
</samlp:AuthnRequest>

Zero test run in Travis CI master build

Dando una occhiata al log della ultima build di master di Travis CI, sembra come se non esegua in realtà nessuna test del modulo spid-spring-integration.

-------------------------------------------------------

 T E S T S

-------------------------------------------------------

Running it.italia.developers.spid.integration.service.test.SPIDIntegrationServiceTest

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 sec

Running it.italia.developers.spid.integration.util.SPIDIntegrationUtilTest

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec

Results :

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

IMHO credo manchi la dipendenza esplicita dal maven-surefire-plugin nel main pom.xml.

Sono io che mi sto perdendo qualcosa?
Grazie

Problemi con la AuthnRequest durante la chiamata "Check Strict"

Sto provando a far funzionare ma durante la fase di test (sto usando: spid-saml-check) quando faccio la chiamata "Check Strict" mi viene restituito sempre un blocco con numero 28 AuthnRequest Signature validation failed.

Sotto riporto una foto di quel blocco.

image

Se puo essere utile ho allegato anche XML del "AuthnRequest"
AuthnRequest.txt

Spero che mi potete aiutare.
Grazie

problema lettura metadata IdP

Buonasera,
dopo la scelta dell'IdP con il quale autenticarsi la libreria si blocca nella classe AuthenticationInfoExtractor nel metodo getEntityDescriptor(String entityId, ClasspathResource resource).
AbstractReloadingMetadataProvider abstractReloadingMetadataProvider = new ResourceBackedMetadataProvider(new Timer(), resource);
BasicParserPool parser = new BasicParserPool();
parser.setNamespaceAware(true);
abstractReloadingMetadataProvider.setParserPool(parser);
abstractReloadingMetadataProvider.initialize();
EntityDescriptor entityDescriptor = abstractReloadingMetadataProvider.getEntityDescriptor(entityId);

si blocca nel fare l'initialize() e va nel catch.
Come mai? il path in resource è corretto.
L'errore che mi stampa è:

org.opensaml.saml2.metadata.provider.MetadataProviderException: Unable to unmarshall metadata

Il metadata che sto utilizzando per la prova è di infocert. https://identity.infocert.it/metadata/metadata.xml

Qualcuno può aiutarmi? grazie

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.