Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Endpoint per generazione metadata firmato #9

Merged
merged 13 commits into from
Nov 11, 2022

Conversation

PiemP
Copy link
Contributor

@PiemP PiemP commented Sep 13, 2022

Fixes #8

Partendo dal codice di https://github.com/italia/spid-aspnetcore sono state aggiunte le seguenti componenti:

  • create le classi per l'elaborazione del metadata tramite XSD

  • aggiunte le classi per l'elaborazione della configurazione del SP

  • aggiunto middleware per esposizione metadata

  • integrati helper con funzioni relative a metadata

  • aggiunta funzione per serializzazione classi nel metadata

  • rimosse costanti non usate ed aggiunte altre necessarie

  • aggiunte funzioni per elaborazione elementi in XMLElement

  • aggiunta funzione per estrazione chiave pubblica da certificato

  • aggiornati namespace

  • aggiunte delle estensioni mancanti dentro CieExtensions.cs

  • sistemato l'ordine dei tag esposti sotto l'elemento ContactPerson per evitare errori con spid-sp-test

  • sistemato CieOptions.cs

  • aggiornati gli XSD a seguito delle attività su Updated CIE schema to avoid issue on tag order in ContactPerson spid-sp-test#149 e su fix: [CIE] xsd updated spid-sp-test#148

  • aggiornato README.md

Come evidenziato nel PR 149 di spid-sp-test rimane ancora da fixare una issue che impedisce di validate i metadata di un SP privato con solo il contatto amministrativo.

- create le classi per l'elaborazione del metadata tramite XSD
- aggiunte le classi per l'elaborazione della configurazione del SP
- aggiunto middleware per esposizione metadata
- integrati helper con funzioni relative a metadata
- aggiunta funzione per serializzazione classi nel metadata
- rimosse costanti non usate ed aggiunte altre necessarie
- aggiunte funzioni per elaborazione elementi in XMLElement
- aggiunta funzione per estrazione chiave pubblica da certificato
- aggiornati namespace
- aggiunte delle estensioni mancanti dentro CieExtensions.cs
- sistemato l'ordine dei tag esposti sotto l'elemento ContactPerson per evitare errori con spid-sp-test
- sistemato CieOptions.cs
- aggiornati gli XSD a seguito delle attività su italia/spid-sp-test#149 e su italia/spid-sp-test#148
- aggiornato README.md
Copy link
Collaborator

@danielegiallonardo danielegiallonardo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Implementare le action GitHub (come da repo SPID) per integrare i test di integrazione con spid-sp-test in fase di push, e modificare le versioni nel file di progetto da 1.1.3-prerelease4 a 1.2.0-prerelease (per verifica con pre-pubblicazione del pacchetto su nuget) e da 1.1.3 a 1.2.0

README.md Outdated
E' possibile aggiungere nuovi ServiceProvider sia in maniera procedurale, in fase di `Startup`, come segue:

```csharp
.AddSpid(o =>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fix naming

README.md Outdated
sia utilizzando una classe che implementa l'interfaccia `IServiceProvidersFactory` e configurandola come segue:

```csharp
.AddSpid(o =>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fix naming

README.md Outdated

Infine, per poter esporre gli endpoint dei metadata relativi ai Service Provider registrati, sarà necessario aggiungere la seguente riga:
```csharp
app.AddSpidSPMetadataEndpoints();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fix naming

README.md Outdated
app.AddSpidSPMetadataEndpoints();
```

Tutti i metadata generati vengono automaticamente esposti su endpoint diversi, che hanno come BasePath `/metadata-cie` (ad esempio, un metadata definito con NomeFile = `metadata.xml` verrà esposto sull'endpoint `/metadata-cie/metadata.xml`): il BasePath può essere cambiato, sovrascrivendo la proprietà `ServiceProvidersMetadataEndpointsBasePath` sulle SpidOptions nello `Startup.cs`.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fix SpidOptions => CieOptions

aggiornate le github action con i test con spid-sp-test
aggiunto il codice per generare i metadata relativi ai test  di github action
@PiemP
Copy link
Contributor Author

PiemP commented Sep 13, 2022

Nooooo i refusi per mancata rinomina noooooooo.... 😂
Spero di aver fatto tutto giusto con la versione del pacchetto e le github action con cui non ho molta esperienza.
Grazie di tutto

PS. ho messo il tutto in draft in attesa del PR di spid-sp-test. Per ora ho provato tutto in locale e un test (relativo alla issue italia/spid-sp-test#121) da gli errori attesi.

@PiemP PiemP marked this pull request as draft September 13, 2022 11:19
@PiemP
Copy link
Contributor Author

PiemP commented Sep 14, 2022

Ho provato a modificare le github actions aggiungendo questo:

- name: Install spid-compliant-certificates cryptography correct version
      run: sudo pip install -Iv cryptography==35.0.0

perché nei log della build mi dava questo:

ERROR: spid-compliant-certificates 0.5.3 has requirement cryptography==35.0.0, but you'll have cryptography 38.0.1 which is incompatible.

Ma poi ho trovato diversi link che dicono di aggiornare pyOpenSSL alla versione 22 che potrebbe essere plausibile visto che nei log di build ho trovato questo:

Requirement already satisfied, skipping upgrade: pyOpenSSL in /usr/lib/python3/dist-packages (from pysaml2>=6.5.1->spid-sp-test) (19.0.0)

non sono molto affine a python...cosa dici?

@danielegiallonardo
Copy link
Collaborator

Purtroppo su Python non so esserti molto d'aiuto. Prova a coinvolgere gli autori di spis-sp-test

@danielegiallonardo
Copy link
Collaborator

In realtà ho visto che la action fallisce perchè non trova il metadata:

Exception: Metadata not found: server response with code 500
Error: Process completed with exit code 1.

Ho visto che tenti di lanciare spid-sp-test con questi parametri:

spid_sp_test --metadata-url https://localhost:5001/metadata-cie/metadata.xml --extra --debug ERROR --profile cie-sp-public

Probabilmente la URL è sbagliata, prova con
--metadata-url https://localhost:5001/cie/metadata.xml

@PiemP
Copy link
Contributor Author

PiemP commented Sep 28, 2022

In realtà ho visto che la action fallisce perchè non trova il metadata:

Exception: Metadata not found: server response with code 500 Error: Process completed with exit code 1.

Ho visto che tenti di lanciare spid-sp-test con questi parametri:

spid_sp_test --metadata-url https://localhost:5001/metadata-cie/metadata.xml --extra --debug ERROR --profile cie-sp-public

Probabilmente la URL è sbagliata, prova con --metadata-url https://localhost:5001/cie/metadata.xml

L'URL è corretta. I metadata generati dall'applicazione di esempio sono visibili a questi indirizzi:

https://localhost:5001/metadata-cie/metadata.xml
https://localhost:5001/metadata-cie/metadata1.xml
https://localhost:5001/metadata-cie/metadata2.xml
https://localhost:5001/metadata-cie/metadata3.xml

non so cosa fare onestamente...o provo a farmi una virtual machine ubuntu e testo la cosa anche lì oppure boh...tra l'altro ritorna un errore 500 quindi l'applicazione CIE.AspNetCore.WebApp va in errore quando viene richiamato l'endpoint.

@danielegiallonardo
Copy link
Collaborator

Puoi provare anche con WSL2, che ho usato personalmente per testare spid-sp-test su una macchina windows, senza dover scomodare necessariamente un host per vm ad hoc

@PiemP
Copy link
Contributor Author

PiemP commented Sep 28, 2022

Puoi provare anche con WSL2

Grazie ci proverò.

La cosa che non capisco è che se lancio CIE.AspNetCore.WebApp con lo stesso comando della github action (dotnet bin\Debug...) sulla mia macchina windows gli endpoint dei metadata non vanno in errore e anche spid-sp-test viene eseguito correttamente. Mi aspetterei un errore 500 se il mio codice non fosse allineato con quello di github.

Faccio ulteriori verifiche.
Grazie

@PiemP
Copy link
Contributor Author

PiemP commented Oct 3, 2022

Ho provato con WSL2 il quale inizialmente mi dava un problema 500 dovuto al fatto che non riuscisse a leggere correttamente il certificato (sembra per un problema di permessi che non riuscivo a confermare). Poi ho riavviato la mia macchina windows, causa aggiornamento e in parte a causa del fatto che la compilazione dell'applicativo continuava a darmi errori strani. Ora non ho più errori: a parte quelli di spid-sp-test conseguenti al fatto che il PR che ho aperto su spid-sp-test non è stato ancora approvato.

Ho controllato se ci fossero opzioni su spid-sp-test per vedere se possiamo debuggare la risposta di Kestrel ma sembra che non sia possibile fare ciò.

Sto sperando che i problemi avuti fin ora siano collegati alle ultime problematiche avute dalla piattaforma https://www.githubstatus.com/history anche perché non so come loggare le cose per capire da dove deriva questo problema: continuo a cercare informazioni a riguardo.

@danielegiallonardo danielegiallonardo marked this pull request as ready for review November 11, 2022 18:31
@danielegiallonardo
Copy link
Collaborator

danielegiallonardo commented Nov 11, 2022

L'action fallisce perchè i due metadata impostati in Startup.cs vengono esposti con nome file metadata1.xml e metadata3.xml, ma la action cerca metadata.xml. Bisogna correggere da una delle due parti. Provvedo io alla modifica

@danielegiallonardo danielegiallonardo merged commit db804a1 into italia:main Nov 11, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Aggiunta funzionalità per generazione metadata firmato
2 participants