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

27 write installation steps in readmemd (#44) #45

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
131 changes: 131 additions & 0 deletions INSTALLATION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
# SPID Proxy Installation Steps
Questa guida vuole essere un supporto per tutti gli utenti che hanno necessità di configurare e installare la soluzione SPID proxy funzionante.

## Prerequisites
- Una sottoscrizione Azure. Se non è presente crearne una [free account](https://azure.microsoft.com/free/?WT.mc_id=A261C142F) prima di iniziare.


## Addons
- Installare all'interno di visual studio code l'estensione [B2Cvscode](https://github.com/azure-ad-b2c/vscode-extension) utile per lavorare con Azure AD B2C.


## Creazione delle risorse
Come prima cosa è necessario creare le risorse utili per poter pubblicare SPID Proxy. Le azioni da fare sono le seguenti:
- Creare un tenant Azure AD B2C all'interno del portale seguendo la seguente esercitazione: [Esercitazione: Creare un tenant di Azure Active Directory B2C](https://learn.microsoft.com/it-it/azure/active-directory-b2c/tutorial-create-tenant)
- Creare un App Service per la pubblicazione dello SPID Proxy, seguendo la seguente quickstart: [Quickstart: Deploy an ASP.NET web app](https://learn.microsoft.com/en-in/azure/app-service/quickstart-dotnetcore?tabs=net60&pivots=development-environment-azure-portal)
- Creare uno storage account, che servirà per avere un posto dove caricare i file della UI Custom e i metadati necessari per la configurazione di Azure AD B2C. Per informazioni segui questo articolo: [Create Storage Account](https://learn.microsoft.com/en-us/azure/storage/common/storage-account-create?tabs=azure-portal)
- Creare una risorsa Application Insight all'interno della propria sottoscrizione, non all'intenro del tenant Azure B2C. Non appena abbiamo creato la risorsa ci occorrera' l'Instrumentation Key, utile per permetterci di inviare gli event data verso Application Insight. Per informazioni fare riferimento a questo articolo [Track user behavior in Azure AD B2C by using Application Insights](https://learn.microsoft.com/en-us/azure/active-directory-b2c/analytics-with-application-insights?pivots=b2c-custom-policy#create-an-application-insights-resource)

## Configurazioni
### Configurazione Identity experience framework
Le custom policy sono file di configurazione che definiscono il comportamento del tenant di Azure Active Directory B2C (Azure AD B2C). Le custom policy possono essere completamente modificate per configurare e personalizzare molte attività di diverso tipo.

Per poter utilizzare le custom policy è necessario creare le chiavi signing e encryption keys all'interno di Azure AD B2C come indicato nel seguente articolo: [Creazione signing and encryption keys](https://docs.microsoft.com/en-us/azure/active-directory-b2c/tutorial-create-user-flows?pivots=b2c-custom-policy#add-signing-and-encryption-keys-for-identity-experience-framework-applications).
Successivamente bisognera' registrare le applicazioni Identity Experience Framework, che sono:
- IdentityExperienceFramework
- ProxyIdentityExperienceFramework

Per informazioni sulla creazione di queste applicazioni fare riferimento alla [documentazione](https://learn.microsoft.com/en-us/azure/active-directory-b2c/tutorial-create-user-flows?pivots=b2c-custom-policy#register-identity-experience-framework-applications)

Una comoda alternativa è il seguente tool [B2C Identity Experience Framework setup](https://b2ciefsetupapp.azurewebsites.net/) che permette di automatizzare il processo di configurazione di Identity Experience Framework.

Quando il tenant è pronto e abbiamo tutte le chiavi necessarie per la configurazione dell'identity experience framework, bisogna modificare il file [appsetting.json](https://github.com/microsoft/SPID-and-Digital-Identity-Enabler/blob/main/AAD%20B2C/CustomPolicies/appsettings.json) andando a specificare all'interno della sezione PolicySettings le chiavi e i valori necessari:
```json
"PolicySettings": {
"IdentityExperienceFrameworkAppId": "",
"ProxyIdentityExperienceFrameworkAppId": "",
"MetadatasBlobStorageUrl": "The url to the container/folder which contains the SPID IdP edited metadatas",
"CustomUiBlobStorageUrl": "The url to the contianer/folder which contains the customUI",
"AppInsightsKey": "The AppInsights key used by custom policies",
"CNSSAMLMetadata": "The metadata url for the CNS middleware. Used only if you want to use CNS"
}
```

**IdentityExperienceFrameworkAppId e ProxyIdentityExperienceFrameworkAppId**
sono i client id delle application registrate per la configurazione dell'identity experience framework.

**MetadatasBlobStorageUrl e CustomUiBlobStorageUrl**
sono gli indirizzi dove sono collocati i file dei metadati e della custom ui. Nell'esempio specifico è stato utilizzato uno storage, ma è possibile usare anche altri servizi. L'importante è che i files siano raggiungibili tramite HTTPS e che i CORS siano correttamente configurati.

**AppInsightsKey** è la chiave per agganciare la telemetria di application insight.
MarcoZama marked this conversation as resolved.
Show resolved Hide resolved

**CNSSAMLMetadata** si utilizza solo nel caso in cui si vuole abilitare il meccanismo di autenticazione tramite CNS. Nello specifico bisognerà inserire l'url statico dell'applicazione web contente i metadata necessari.

### Creazione delle signin Key ###
All'interno dello starter pack di Azure B2C non sono presenti identity provider SAML, quindi bisogna definirne uno ad hoc che, dopo averlo caricato su Azure B2C, dovrà essere definito all'interno della policy [TrustFrameworkExtension](https://github.com/microsoft/SPID-and-Digital-Identity-Enabler/blob/main/AAD%20B2C/CustomPolicies/TrustFrameworkExtensions.xml#L141). Il certificato verrà utilizzato da Azure B2C per firmare tutte le richieste verso SpidProxy.

Come prima cosa bisognerà creare un certificato seguendo la seguente guida: [creare un certificato self-signed](https://docs.microsoft.com/en-us/azure/active-directory-b2c/identity-provider-adfs-saml?tabs=windows&pivots=b2c-custom-policy#create-a-self-signed-certificate).
```powershell
New-SelfSignedCertificate `
-KeyExportPolicy Exportable `
-Subject "CN=yourtenant.onmicrosoft.com" `
-KeyAlgorithm RSA `
-KeyLength 2048 `
-KeyUsage DigitalSignature `
-NotAfter (Get-Date).AddYears(10) `
-CertStoreLocation "Cert:\CurrentUser\My"
```
Dopo aver creato il cerficato bisognerà esportarlo in locale ricordandosi di selezionare export privete key. Successivamente bisognerà selezionare e inserire una password e assicurandosi che sia selezionata come Encryption TripleDeS-SHA1, in quanto l'altra su Azure B2C non funziona.

Successivamente bisognerà accedere al tenant B2C e caricare il certificato generando una chiave che verrà poi inserita all'interno della [TrustFrameworkExtension](https://github.com/microsoft/SPID-and-Digital-Identity-Enabler/blob/main/AAD%20B2C/CustomPolicies/TrustFrameworkExtensions.xml#L141) policy.
Copy link
Collaborator

Choose a reason for hiding this comment

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

forse dovremmo dirgli esattamente che nome usare per la key

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Ma e' indicato nella doc


Arrivati a questo punto sarà necessario caricare le custom policy su tenant Azure B2C.

### Caricamento della UI Custom Storage Account ###

**L'utilizzo dello storage account è solo una possibilità, infatti i file della UI e le custom policy possono essere posizionati in qualsiasi posto, purchè sia raggiungibile tramite HTTPS e i CORS siano configurati correttamente.**

Accedere allo Storage account e configurare il CORS, cliccando su Resource Sharing e impostando nel blob service l'origine https://.b2clogin.com e gli allowed methods (GET e OPTIONS). Dopo avere inserito star (*) in Allowed Header e in Exposed Header, impostare un Max Age di 200.

Successivamente salvare la configurazione CORS e procedere con il caricamento dei file statici.

Nella folder della CustomUI sono presenti tutti i file della UI che dovranno essere caricati nello storage. All'interno di questi file sono presenti dei placeholder che fanno riferimento alle proprietà CustomUiBlobStorageUrl e MetadatasBlobStorageUrl del file [appsetting.json](https://github.com/microsoft/SPID-and-Digital-Identity-Enabler/blob/main/AAD%20B2C/CustomPolicies/appsettings.json).

Trovando i placeholder dentro i files della customUI e sostituendo il valore con l'url rispettivo i file sono pronti per essere caricati nello storage nella cartella customUI dentro $web.
**Per poter visualizzare il container $web bisogna abilitare la feature static website dentro lo storage account.**

### Caricamento dei Metadata dentro lo Storage Account ###
Nei file dei metadati dobbiamo sostituire gli endpoint con quelli dello spidproxy e dobbiamo generare un certificato dello spidproxy seguendo le norme AGID.

Per creare il certifcato dello spidproxy dobbiamo utilizzare il tool [spid compliant certificate](https://github.com/italia/spid-compliant-certificates). Le indicazioni per creare il certificato sono indicate a questo link [Avviso SPID n.29 v3](https://www.agid.gov.it/sites/default/files/repository_files/spid-avviso-n29v3-specifiche_sp_pubblici_e_privati_0.pdf).
Da normativa e' possibile creare un certificato per i soggetti pubblici, mentre per i privati si crea un CSR e lo si spedisce ad AGID che a sua volta rispndera' inviando a sua volta un certificato valido.

Copiare il file public.env.example e rinominarlo in docker.env. Succesivamente modificarne i valori all'interno indicando i valori del soggetto pubblico. Le informazioni sono ricercabili sul sito di AGID.
Consigliamo di fare riferimento al repository [spid compliant certificate](https://github.com/italia/spid-compliant-certificates) per impostare correttamente tutti i valori di configurazione.


Dopo avere settato questi valori seguire la [guida](https://github.com/italia/spid-compliant-certificates#private-key-csr-and-self-signed-certificate-for-public-sector-with-docker) eseguendo lo script gencert-with-docker.sh.
Dopo che le chiavi sono state generate correttamente, bisognerà unirle tramite openssl. Per farlo bisognerà usare il certificato pubblico (crt.pem) e la chiave (key.pem) tramite il seguente comando
```bash
openssl pkcs12 -export -out outputfile.pfx -inkey key.pem -in crt.pem
```
Il pfx sarà da caricare all'interno dello spidproxy, mentre il crt.pem servirà per generare i metadata modificati degli IDP di SPID. E' presente uno [script powershell](https://github.com/microsoft/SPID-and-Digital-Identity-Enabler/blob/main/AAD%20B2C/Powershell%20Scripts/Get-SPIDMetadatas.ps1) che aiuta in questo processo.
Si dovrà copiare il crt.pem in formato stringa all'interno della folder con lo script powershell successivamente si eseguirà lo script, indicando anche l'url dello spid proxy all'interno del file
```powershell
Get-SPIDMetadatas.ps1 -SPIDProxyBaseUrl "url-spid-proxy" -additionalSPIDProxyBaseUrl "SPIDProxy parallelo per persone giuridiche (opzionale)" -certificateFilePath "path del certificato"
```
Lo script copierà i metadata originali modificandoli con i parametri che sono stati inseriti nella linea di comando. I file saranno cosi pronti da caricare sullo storage account. La folder dove inserli è "metadatas".

## Pubblicazione dello SPID Proxy
L'ultimo passo da seguire è la pubblicazione dello SPID Proxy. Bisognerà scaricare dalle release lo .zip di SpidProxy. Accedere all'app service e tramite Kudu utilizzare la funzione Zip push deploy per caricare lo zip della release.
Per il caricamento del certificato si possono seguire due procedure:
- Caricare il certificato all'interno di un Azure Key Vault (procedura consigliata). Per dubbi seguire la seguente [guida](https://learn.microsoft.com/en-us/azure/key-vault/certificates/tutorial-import-certificate?tabs=azure-portal).
- Caricare il file pfx generato dentro la folder SigninCert posizionata nella root dello spid proxy
Il deploy ora è terminato.

## Configurazione SPIDProxy
Dopo aver ultimato il deploy rimane solamente da configurare l'applicazione nei suoi parametri di configurazione.
All'interno del portale, nella pagina di configurazione di App Service bisognerà andare ad aggiungere dei parametri di configurazione che sono:
- Certificate__CertName come indicato [qui](https://github.com/microsoft/SPID-and-Digital-Identity-Enabler/blob/main/WebApps/Proxy/Microsoft.SPID.Proxy/appsettings.json#L38)
- Certificate__CertPassword come indicato [qui](https://github.com/microsoft/SPID-and-Digital-Identity-Enabler/blob/main/WebApps/Proxy/Microsoft.SPID.Proxy/appsettings.json#L39)

Successivamente la sezione che va modificata [qui](https://github.com/microsoft/SPID-and-Digital-Identity-Enabler/blob/main/WebApps/Proxy/Microsoft.SPID.Proxy/appsettings.json#L41) nello specifico:
- **Federator__EntityId**: entity id di Azure B2C.
- **Federator__SPIDEntityId**: entity id scritto nel metadata che verrà inviato a AGID.
- **Federator__FederatorAttributeConsumerServiceUrl**: Url dove bisogna mandare le risposte dallo SPIDProxy verso Azure B2C.
Non è necessario modificare altre configurazioni.

MarcoZama marked this conversation as resolved.
Show resolved Hide resolved
Copy link
Collaborator

Choose a reason for hiding this comment

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

forse dovremmo aggiungere anche qualcosa in merito al test di funzionamento, magari usando ambiente demo di agid

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Riesci a spiegarmi meglio questo punto? Non sarebbe piu' opportuno specificare un altro readme per la parte di test funzionamento?

La fase successiva riguarda l'upload delle custom policy all'interno di Azure Active Directory B2C. Questo si puo' fare in due modi:
- manualmente dal portale di Azure
- tramite l'estensione per [vs code](https://marketplace.visualstudio.com/items?itemName=AzureADB2CTools.aadb2c).

Binary file added images/b2c_cert_1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/b2c_cert_2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading