

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Utilizzo della federazione delle identità Web
<a name="WIF"></a>

Quando scrivi un'applicazione destinata a un gran numero di utenti, puoi scegliere di utilizzare la *federazione delle identità Web* per l'autenticazione e l'autorizzazione. La federazione delle identità Web rimuove la necessità di creare singoli utenti . Gli utenti possono invece accedere a un provider di identità e quindi ottenere credenziali di sicurezza temporanee da AWS Security Token Service ().AWS STS L'app può quindi utilizzare queste credenziali per accedere ai servizi AWS .

La federazione delle identità Web supporta i seguenti provider di identità:
+ Login with Amazon
+ Facebook
+ Google

## Risorse aggiuntive per la federazione delle identità Web
<a name="WIF.AdditionalResources"></a>

Le risorse seguenti possono fornire ulteriori informazioni sulla federazione delle identità Web:
+ Il post [Federazione delle identità Web tramite AWS SDK per .NET](https://aws.amazon.com/blogs/developer/web-identity-federation-using-the-aws-sdk-for-net)sul blog di AWS Developer illustra come utilizzare la federazione delle identità Web con Facebook. Include frammenti di codice in C\$1 che mostrano come assumere un ruolo IAM con l'identità web e come utilizzare credenziali di sicurezza temporanee per accedere a una risorsa. AWS 
+ [AWS Mobile SDK for iOS](https://aws.amazon.com/sdkforios/) e [AWS Mobile SDK per Android](https://aws.amazon.com/sdkforandroid/) contengono app di esempio. Includono codice che mostra come invocare i provider di identità e quindi come utilizzare le informazioni provenienti da questi provider per ottenere e usare credenziali di sicurezza temporanee.
+ L'articolo [Web Identity Federation with Mobile Applications](https://aws.amazon.com/articles/4617974389850313) illustra la federazione delle identità Web e mostra un esempio di come utilizzare la federazione delle identità Web per accedere a una risorsa. AWS 

## Policy di esempio per la federazione delle identità Web
<a name="WIF.Example"></a>

Per mostrare come utilizzare la federazione delle identità web con DynamoDB, rivedi *GameScores*la tabella introdotta in. [Utilizzo di condizioni di policy IAM per il controllo granulare degli accessi](specifying-conditions.md) Ecco la chiave principale per. *GameScores*


****  

| Nome tabella | Tipo di chiave primaria | Nome e tipo di chiave di partizione | Nome e tipo di chiave di ordinamento | 
| --- | --- | --- | --- | 
| GameScores (UserId, GameTitle, ...) | Composita | Nome dell'attributo: UserId Tipo: String | Nome dell'attributo: GameTitle Tipo: String | 

Immagina ora che un'app di gioco per dispositivi mobili utilizzi questa tabella e che debba supportare migliaia, o persino milioni, di utenti. Su questa scala, diventa molto difficile gestire i singoli utenti delle app e garantire che ogni utente possa accedere solo ai propri dati nella *GameScores*tabella. Per fortuna, molti utenti dispongono già di account con un provider di identità di terze parti, come Facebook, Google o Login with Amazon. Pertanto, è opportuno utilizzare uno di questi provider per attività di autenticazione.

Per poterlo fare utilizzando la federazione delle identità Web, lo sviluppatore deve registrare l'app con un provider di identità (come Login with Amazon) e ottenere un ID app univoco. Successivamente, lo sviluppatore dovrà creare un ruolo IAM. (In questo esempio, questo ruolo è denominato *GameRole*.) Al ruolo deve essere allegato un documento di policy IAM, che specifichi le condizioni in base alle quali l'app può accedere alla *GameScores*tabella.

Quando un utente desidera giocare, accede al proprio account di Login with Amazon dall'interno dell'app di gioco. L'app chiama quindi AWS Security Token Service (AWS STS), fornendo l'ID dell'app Login *GameRole*with Amazon e richiedendo l'iscrizione. AWS STS restituisce AWS le credenziali temporanee all'app e le consente di accedere alla *GameScores*tabella, in base al documento relativo alla *GameRole*policy.

Il seguente diagramma mostra come questi elementi di integrano fra loro.

![\[Il flusso di lavoro di un’app di videogiochi. L'app utilizza Amazon ID e AWS STS per ottenere credenziali temporanee per accedere a una tabella DynamoDB.\]](http://docs.aws.amazon.com/it_it/amazondynamodb/latest/developerguide/images/wif-overview.png)


**Panoramica sulla federazione delle identità Web**

1. L'app chiama un provider di identità di terza parte per autenticare l'utente e l'app. Il provider di identità restituisce all'app un token di identità Web.

1. L'app chiama AWS STS e trasmette il token di identità web come input. AWS STS autorizza l'app e le fornisce credenziali di AWS accesso temporanee. L'app può assumere un ruolo IAM (*GameRole*) e accedere alle AWS risorse in conformità con la politica di sicurezza del ruolo.

1. L'app chiama DynamoDB per accedere alla tabella. *GameScores* Poiché ha assunto il *GameRole*, l'app è soggetta alla politica di sicurezza associata a quel ruolo. Il documento della policy impedisce all'app di accedere a dati che non appartengono all'utente.

Ancora una volta, ecco la politica di *GameRole*sicurezza mostrata in[Utilizzo di condizioni di policy IAM per il controllo granulare degli accessi](specifying-conditions.md):

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"AllowAccessToOnlyItemsMatchingUserID",
         "Effect":"Allow",
         "Action":[
            "dynamodb:GetItem",
            "dynamodb:BatchGetItem",
            "dynamodb:Query",
            "dynamodb:PutItem",
            "dynamodb:UpdateItem",
            "dynamodb:DeleteItem",
            "dynamodb:BatchWriteItem"
         ],
         "Resource":[
            "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores"
         ],
         "Condition":{
            "ForAllValues:StringEquals":{
               "dynamodb:LeadingKeys":[
                  "${www.amazon.com:user_id}"
               ],
               "dynamodb:Attributes":[
                  "UserId",
                  "GameTitle",
                  "Wins",
                  "Losses",
                  "TopScore",
                  "TopScoreDateTime"
               ]
            },
            "StringEqualsIfExists":{
               "dynamodb:Select":"SPECIFIC_ATTRIBUTES"
            }
         }
      }
   ]
}
```

------

La `Condition` clausola determina quali elementi *GameScores*sono visibili all'app. Per farlo, confronta l'ID Login with Amazon con i valori della chiave di partizione `UserId` in `GameScores`. Solo gli elementi appartenenti all'utente corrente possono essere elaborati utilizzando una delle operazioni DynamoDB elencate in questa policy. Altri item nella tabella non sono accessibili. Inoltre, è possibile accedere solo agli attributi specifici elencati nella policy.

# Preparazione per l'utilizzo della federazione delle identità Web
<a name="WIF.PreparingForUse"></a>

Se sei uno sviluppatore app e desideri utilizzare la federazione delle identità Web per la sua app, procedi nel seguente modo:

1. **Registrati come sviluppatore con un provider di identità di terza parte.** I seguenti link esterni forniscono informazioni sulla registrazione con i provider di identità supportati:
   + [Centro Sviluppatori di Login with Amazon](http://login.amazon.com/)
   + [Registrazione](https://business.facebook.com/business/loginpage) sul sito di Facebook
   + [Utilizzo della OAuth versione 2.0 per accedere a Google APIs](https://developers.google.com/accounts/docs/OAuth2) sul sito di Google

1. **Registra l'app con il provider di identità.** Quando lo fai, il provider ti fornisce un ID univoco per la tua app. Se desideri che la tua app funzioni con più provider di identità, è necessario ottenere un ID app da ogni provider.

1. **Crea uno o più ruoli IAM. **È necessario un ruolo per ogni provider di identità di ogni app. Ad esempio, puoi creare un ruolo che può essere assunto da un'app in cui l'utente ha effettuato l'accesso tramite Login with Amazon, un secondo ruolo per la stessa app in cui l'utente ha effettuato l'accesso tramite Facebook e un terzo ruolo per l'app in cui gli utenti effettuano l'eccesso tramite Google.

   Come parte della procedura di creazione dei ruoli, è necessario collegare una policy IAM al ruolo. Il documento di policy dovrebbe definire le risorse di richieste dall'app e le autorizzazioni per accedere a tali risorse.

Per ulteriori informazioni, consulta [Informazioni sulla federazione delle identità Web](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc.html) nella *Guida per l'utente di IAM*. 

**Nota**  
In alternativa AWS Security Token Service, puoi usare Amazon Cognito. Amazon Cognito è il servizio più adatto alla gestione delle credenziali provvisorie per le applicazioni per dispositivi mobili. Per ulteriori informazioni, consulta [Ottenere le credenziali](https://docs.aws.amazon.com/cognito/latest/developerguide/getting-credentials.html) nella *Guida per gli sviluppatori di Amazon Cognito*. 

## Generazione di una policy IAM tramite la console DynamoDB
<a name="WIF.PreparingForUse.DDBConsole"></a>

La console DynamoDB consente di creare una policy IAM da usare con la federazione delle identità Web. Per poterlo fare, scegli una tabella DynamoDB e specifica il provider di identità, le operazioni e gli attributi da includere nella policy. La console DynamoDB genera quindi una policy che può essere collegata a un ruolo IAM.

1. Accedi Console di gestione AWS e apri la console DynamoDB all'indirizzo. [https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/)

1.  Nel pannello di navigazione, seleziona **Tabelle**. 

1.  Nell'elenco di tabelle, seleziona la tabella per la quale si desidera creare la policy IAM. 

1.  Seleziona il ppulsante **Azioni** e scegli **Crea una policy di controllo degli accessi**. 

1.  Seleziona il provider di identità, le operazioni e gli attributi per la policy. 

    Dopo aver selezionato le impostazioni desiderate, scegliere **Genera policy** Verrà visualizzata la policy generata; 

1.  Scegli **Vedi la documentazione** e segui i passaggi necessari per associare la policy generata a un ruolo IAM. 

# Scrittura dell'app per l'utilizzo della federazione delle identità Web
<a name="WIF.RunningYourApp"></a>

Per utilizzare la federazione delle identità Web, l'app deve assumere il ruolo IAM creato. Da quel punto in poi, l'app applica la policy d'accesso collegata al ruolo.

In fase di runtime, se l'app utilizza la federazione delle identità Web, deve seguire la procedura seguente:

1. **Autenticarsi con un provider di identità di terza parte.** L'app deve chiamare il provider di identità utilizzando un'interfaccia fornita da quest'ultimo. Il modo esatto in cui si effettua l'autenticazione dell'utente dipende dal provider e dalla piattaforma su cui si esegue l'app. In genere, se l'utente non ha già effettuato l'accesso, il provider di identità si occupa di mostrare una pagina di accesso per tale provider.

   Dopo aver autenticato l'utente, il provider di identità restituisce alla tua app un token di identità Web. Il formato di questo token dipende dal provider, ma in genere è una stringa di caratteri molto lunga.

1. **Ottieni credenziali di AWS sicurezza temporanee.** Per fare ciò, l'app invia una richiesta `AssumeRoleWithWebIdentity` a AWS Security Token Service AWS STS. Questa richiesta contiene i seguenti elementi:
   + Il token dell'identità Web ottenuto nella fase precedente;
   + L'ID app fornito dal provider di identità;
   + L'Amazon Resource Name (ARN) del ruolo IAM che è stato creato per questo provider di identità per questa app.

   AWS STS restituisce un set di credenziali di AWS sicurezza che scadono dopo un determinato periodo di tempo (3.600 secondi, per impostazione predefinita).

   L'esempio seguente mostra una richiesta e la risposta da un'operazione `AssumeRoleWithWebIdentity` in AWS STS. Il token dell'identità Web è stato ottenuto dal provider di identità Login with Amazon.

   ```
   GET / HTTP/1.1
   Host: sts.amazonaws.com
   Content-Type: application/json; charset=utf-8
   URL: https://sts.amazonaws.com/?ProviderId=www.amazon.com
   &DurationSeconds=900&Action=AssumeRoleWithWebIdentity
   &Version=2011-06-15&RoleSessionName=web-identity-federation
   &RoleArn=arn:aws:iam::123456789012:role/GameRole
   &WebIdentityToken=Atza|IQEBLjAsAhQluyKqyBiYZ8-kclvGTYM81e...(remaining characters omitted)
   ```

   

   ```
   <AssumeRoleWithWebIdentityResponse
     xmlns="https://sts.amazonaws.com/doc/2011-06-15/">
     <AssumeRoleWithWebIdentityResult>
       <SubjectFromWebIdentityToken>amzn1.account.AGJZDKHJKAUUSW6C44CHPEXAMPLE</SubjectFromWebIdentityToken>
       <Credentials>
         <SessionToken>AQoDYXdzEMf//////////wEa8AP6nNDwcSLnf+cHupC...(remaining characters omitted)</SessionToken>
         <SecretAccessKey>8Jhi60+EWUUbbUShTEsjTxqQtM8UKvsM6XAjdA==</SecretAccessKey>
         <Expiration>2013-10-01T22:14:35Z</Expiration>
         <AccessKeyId>06198791C436IEXAMPLE</AccessKeyId>
       </Credentials>
       <AssumedRoleUser>
         <Arn>arn:aws:sts::123456789012:assumed-role/GameRole/web-identity-federation</Arn>
         <AssumedRoleId>AROAJU4SA2VW5SZRF2YMG:web-identity-federation</AssumedRoleId>
       </AssumedRoleUser>
     </AssumeRoleWithWebIdentityResult>
     <ResponseMetadata>
       <RequestId>c265ac8e-2ae4-11e3-8775-6969323a932d</RequestId>
     </ResponseMetadata>
   </AssumeRoleWithWebIdentityResponse>
   ```

1. **Accedere alle risorse. AWS ** La risposta da AWS STS contiene le informazioni che sono richieste dall'app per poter accedere alle risorse DynamoDB:
   + I campi `AccessKeyID`, `SecretAccessKey` e `SessionToken` contengono le credenziali di sicurezza valide solo per questo utente e quest'app. 
   + Il campo `Expiration` indica il limite di tempo dopo il quale queste credenziali non sono più valide.
   + Il campo `AssumedRoleId` contiene il nome di un ruolo IAM specifico della sessione che stato assunto dall'app. L'app rispetta i controlli degli accessi nel documento della policy IAM per la durata di questa sessione.
   + Il campo `SubjectFromWebIdentityToken` contiene l'ID univoco presente in una variabile di policy IAM per questo provider di identità specifico. Di seguito sono riportate le variabili di policy IAM per i provider supportati e alcuni valori di esempio:  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/amazondynamodb/latest/developerguide/WIF.RunningYourApp.html)

Per le policy IAM di esempio in cui vengono utilizzate queste variabili di policy, consulta [Policy di esempio: utilizzo di condizioni per il controllo granulare degli accessi](specifying-conditions.md#FGAC_DDB.Examples).

Per ulteriori informazioni su come AWS STS generare credenziali di accesso temporanee, consulta [Requesting Temporary Security Credentials](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html) nella *IAM* User Guide.