Indice dei contenuti
- Come funziona un Security Token Service
- Vantaggi dell’Utilizzo di un Security Token Service (STS)
- Sfide e best practices nella gestione di un STS
- Confronto tra STS e altri sistemi di autenticazione
Il Security Token Service (STS) è un servizio che genera, convalida e gestisce token di sicurezza utilizzati per l’autenticazione e l’autorizzazione nelle applicazioni e nei sistemi informatici.
Questo meccanismo consente di centralizzare la gestione delle credenziali, migliorando la sicurezza e facilitando l’accesso a più servizi con un’unica identità digitale.
Negli ultimi anni, i sistemi di autenticazione tradizionali basati su username e password hanno mostrato limiti significativi, come vulnerabilità agli attacchi di phishing e gestione inefficiente delle credenziali.
Il STS offre una soluzione più sicura grazie all’uso di token temporanei, riducendo il rischio di furto di credenziali e migliorando l’esperienza utente attraverso il Single Sign-On (SSO) e la federazione delle identità.
Come funziona un Security Token Service
Un Security Token Service (STS) è un mediatore di fiducia tra un utente (o un’applicazione) e un servizio protetto. Il suo compito è gestire l’autenticazione e l’autorizzazione emettendo token di sicurezza che certificano l’identità dell’utente e i suoi diritti di accesso.
Flusso di autenticazione con un STS
Richiesta di autenticazione
Un utente o un’applicazione tenta di accedere a una risorsa protetta, come un’app aziendale o un’API cloud.
Verifica delle credenziali
Il Security Token Service autentica l’utente con uno dei seguenti metodi:
- password e username;
- certificati digitali;
- Autenticazione Multi-Fattore (MFA);
- autenticazione tramite un provider di identità federata (es. Google, Microsoft, Okta).
Emissione del token
Dopo una verifica positiva, l’STS genera un token di sicurezza che contiene informazioni sull’utente, come:
- identità dell’utente (es. email o ID univoco);
- permessi di accesso;
- scadenza del token;
- firma crittografica per garantire l’integrità del token
Accesso alla risorsa
L’utente presenta il token al servizio richiesto (es. un’app web, un database o un’API). Il servizio verifica il token e, se valido, concede l’accesso.
Esempio 1: accesso a Microsoft 365 con Azure AD STS
Un utente aziendale vuole accedere a Microsoft 365 con il proprio account aziendale:
- l’utente apre Outlook Web App e inserisce la propria email aziendale;
- il browser reindirizza l’utente a Azure AD STS, che richiede la password;
- dopo l’autenticazione, Azure AD STS emette un token SAML o OAuth 2.0;
- outlook verifica il token e concede l’accesso senza richiedere nuovamente le credenziali.
Questo meccanismo consente il Single Sign-On (SSO): se l’utente accede a Teams o SharePoint, non dovrà più inserire la password.
Esempio 2: accesso temporaneo a un’API AWS con AWS STS
Un’applicazione su AWS Lambda deve accedere a un database Amazon DynamoDB, ma senza credenziali statiche:
- l’app richiede un token temporaneo a AWS Security Token Service (STS);
- AWS STS verifica l’identità dell’applicazione e genera credenziali temporanee con permessi limitati;
- l’app usa il token per interrogare il database DynamoDB;
- DynamoDB verifica il token con AWS STS e concede l’accesso.
Questo metodo riduce il rischio di esposizione delle credenziali, migliorando la sicurezza.
Punti chiave
- Un Security Token Service (STS) autentica gli utenti ed emette token di sicurezza per un accesso sicuro alle risorse digitali;
- I token contengono informazioni crittografate sull’identità e le autorizzazioni dell’utente;
- Le soluzioni STS come Azure AD, AWS STS e Okta supportano standard di settore come OAuth 2.0, SAML e OpenID Connect;
- L’implementazione di un STS migliora la sicurezza, la conformità e l’esperienza utente abilitando l’autenticazione federata e Single Sign-On (SSO).
Protocolli di autenticazione supportati
Un Security Token Service utilizza protocolli standard per garantire l’interoperabilità tra sistemi diversi:
- OAuth 2.0
Usato per l’autenticazione e l’accesso alle API web senza condividere le credenziali dell’utente.
- SAML (Security Assertion Markup Language)
Ampiamente adottato nelle aziende per l’autenticazione federata e il Single Sign-On.
- OpenID Connect (OIDC)
Basato su OAuth 2.0, permette di autenticare utenti tramite provider di identità esterni come Google o Microsoft.
Vantaggi dell’utilizzo di un Security Token Service (STS)
L’adozione di un Security Token Service (STS) offre numerosi vantaggi per la sicurezza, l’integrazione con il cloud e la gestione degli accessi. Un STS migliora la protezione delle credenziali, semplifica l’autenticazione e facilita l’auditing delle attività utente.
Maggiore sicurezza delle credenziali
- Come funziona
I token generati da un STS hanno una durata limitata e possono essere revocati in caso di compromissione, riducendo il rischio di accessi non autorizzati. A differenza delle password statiche, i token sono temporanei e protetti con crittografia avanzata.
Esempio: accesso sicuro con AWS STS
- Un amministratore AWS utilizza AWS Security Token Service (STS) per concedere credenziali temporanee ai propri utenti.
- Se un token viene compromesso, scadrà automaticamente dopo 15 minuti (o il tempo configurato).
- A differenza di una password statica, l’attaccante non può riutilizzare il token dopo la scadenza.
Accesso federato e Single Sign-On (SSO)
- Come funziona
Con il Single Sign-On (SSO), gli utenti possono autenticarsi una sola volta ed accedere a più servizi senza dover inserire ripetutamente le credenziali. Questo riduce il numero di password da ricordare e migliora l’esperienza utente.
Esempio: accesso a Microsoft 365 con Azure AD STS
- Un utente aziendale si autentica su Azure Active Directory (AD) utilizzando le proprie credenziali.
- Dopo il login, Azure AD STS emette un token SAML che consente l’accesso automatico a Teams, Outlook, SharePoint e altre applicazioni Microsoft 365.
- L’utente non deve inserire nuovamente la password, migliorando produttività e sicurezza.
Facilità di integrazione con il Cloud e ambienti ibridi
- Come funziona
Molti provider STS supportano sia ambienti on-premise che Cloud, facilitando l’integrazione di applicazioni aziendali tradizionali con servizi cloud come AWS, Azure e Google Cloud.
Esempio: integrazione di un CRM on-premise con Google Cloud
- Un’azienda utilizza un CRM interno e vuole integrarlo con Google Workspace.
- Grazie a Google Cloud Identity-Aware Proxy (IAP), gli utenti si autenticano con le credenziali aziendali e ricevono un token OAuth 2.0 per accedere sia al CRM on-premise che ai servizi Google Cloud.
- L’azienda evita la gestione di account separati per il CRM e Google, semplificando la sicurezza.
Riduzione del rischio di phishing
- Come funziona
I token di autenticazione eliminano la necessità di inserire continuamente le credenziali, riducendo l’efficacia dei tentativi di phishing. Senza una password fissa, un attaccante non può rubare le credenziali dell’utente.
Esempio: accesso sicuro a un’API con Okta STS
- Un’applicazione mobile utilizza Okta STS per autenticare gli utenti.
- Dopo il login, Okta genera un token JWT (JSON Web Token) che l’app usa per accedere alle API.
- Anche se un attaccante intercetta la richiesta API, il token ha una durata breve e non può essere riutilizzato.
Maggiore controllo e auditing
- Come funziona
Un STS consente di monitorare e registrare tutte le autenticazioni e gli accessi alle risorse, garantendo la conformità a normative di sicurezza come GDPR, ISO 27001 e SOC 2.
Esempio: audit dei token in un’azienda con Active Directory Federation Services (ADFS)
- Un’azienda utilizza ADFS per gestire l’autenticazione dei dipendenti.
- Il team di sicurezza può monitorare tutti i token generati, verificare gli accessi e rilevare attività sospette.
- Se un utente tenta di accedere da un paese non autorizzato, l’azienda può bloccare il token e generare un alert di sicurezza.
Le moderne piattaforme cloud offrono STS per garantire autenticazione sicura e gestione delle identità. Vediamo le soluzioni più utilizzate, con esempi pratici e codice.
Microsoft Active Directory Federation Services (ADFS)
- Descrizione
ADFS (Active Directory Federation Services) consente autenticazione federata tra diversi sistemi utilizzando SAML 2.0 e OAuth 2.0. È usato nelle aziende per gestire accessi sicuri a Microsoft 365, applicazioni interne e servizi cloud.
Esempio: Implementazione di ADFS per il Single Sign-On (SSO) con SAML
L’azienda vuole configurare ADFS per consentire ai dipendenti di autenticarsi una sola volta ed accedere a più applicazioni aziendali.
Configurazione di un Relying Party Trust in ADFS:
- aprire la console di ADFS Management;
- aggiungere un nuovo Relying Party Trust;
- configurare il provider di identità e il certificato SAML;
- creare le regole di autenticazione.
Esempio di richiesta SAML inviata da un’applicazione a ADFS
xml
<samlp:AuthnRequest
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
ID="_123456"
Version="2.0"
IssueInstant="2024-03-10T12:00:00Z"
Destination="https://adfs.example.com/adfs/ls/"
AssertionConsumerServiceURL="https://app.example.com/sso/consume">
<saml:Issuer>https://app.example.com</saml:Issuer>
</samlp:AuthnRequest>
Risposta SAML inviata da ADFS
xml
<samlp:Response
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
ID="_response123"
InResponseTo="_123456"
Version="2.0">
<saml:Assertion>
<saml:Subject>
<saml:NameID>user@example.com</saml:NameID>
</saml:Subject>
<saml:AttributeStatement>
<saml:Attribute Name="Role">
<saml:AttributeValue>Admin</saml:AttributeValue>
</saml:Attribute>
</saml:AttributeStatement>
</saml:Assertion>
</samlp:Response>

AWS Security Token Service (AWS STS)
- Descrizione
AWS STS permette di generare credenziali temporanee per accedere in modo sicuro a servizi AWS. È utilizzato per implementare accesso limitato alle risorse AWS senza esporre credenziali statiche.
Esempio: generazione di credenziali temporanee per un’applicazione AWS Lambda
Un’app AWS Lambda deve accedere a S3 senza utilizzare credenziali fisse.
Codice Python per ottenere un token da AWS STS:
python
import boto3
# Creazione del client STS
sts_client = boto3.client('sts')
# Ottenere credenziali temporanee
response = sts_client.assume_role(
RoleArn="arn:aws:iam::123456789012:role/MyRole",
RoleSessionName="MySession"
)
# Estrarre le credenziali
credentials = response['Credentials']
print("Access Key:", credentials['AccessKeyId'])
print("Secret Key:", credentials['SecretAccessKey'])
print("Session Token:", credentials['SessionToken'])
Il token dura solo 1 ora, migliorando la sicurezza rispetto a credenziali statiche.
Azure Active Directory STS
- Descrizione
Azure AD STS gestisce l’autenticazione per applicazioni cloud e on-premise, supportando OAuth 2.0 e OpenID Connect. È ampiamente utilizzato con Microsoft 365 e Azure.
Esempio: autenticazione con OAuth 2.0 su Azure AD
Un’app deve autenticarsi con Azure AD e ottenere un token di accesso per chiamare Microsoft Graph API.
Richiesta di un token di accesso con curl:
bash
curl -X POST https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "client_id={client_id}" \
-d "client_secret={client_secret}" \
-d "scope=https://graph.microsoft.com/.default" \
-d "grant_type=client_credentials"
Risposta con token JWT:
json
{
"access_token": "eyJhbGciOiJIUzI1NiIs...",
"expires_in": 3600,
"token_type": "Bearer"
}
L’app può ora accedere a Microsoft Graph API per leggere i dati dell’utente.
Okta STS
- Descrizione
Okta STS è un servizio cloud per la gestione delle identità, supporta OAuth 2.0 e OpenID Connect e permette integrazione con applicazioni aziendali e SaaS.
Esempio: login con OpenID Connect in un’app web
Un’app usa Okta per autenticare gli utenti con OAuth 2.0.
Configurazione della richiesta di autenticazione OpenID Connect:
html
<a href="https://your-okta-domain.com/oauth2/default/v1/authorize?
client_id=your_client_id&
response_type=code&
scope=openid profile email&
redirect_uri=https://yourapp.com/callback">
Login con Okta
</a>
L’utente viene reindirizzato a Okta, autenticato e riceve un token JWT.
Google Cloud Identity-Aware Proxy (IAP)
- Descrizione
Google Cloud IAP protegge l’accesso alle applicazioni ospitate su Google Cloud Platform (GCP) e verifica l’identità degli utenti con OAuth 2.0.
Esempio: verifica di un token di accesso IAP in un’app Node.js
javascript
const {OAuth2Client} = require('google-auth-library');
const client = new OAuth2Client();
async function verifyToken(token) {
const ticket = await client.verifyIdToken({
idToken: token,
audience: "your-client-id.apps.googleusercontent.com"
});
const payload = ticket.getPayload();
console.log("User email:", payload.email);
L’app verifica se l’utente ha un token valido prima di concedere l’accesso.
Sfide e best practices nella gestione di un STS
- Scalabilità e gestione delle sessioni
Un STS deve essere progettato per gestire un alto volume di richieste senza impattare le prestazioni. - Configurazione sicura dei token
L’uso di chiavi di firma robuste e la definizione di una scadenza breve per i token aiuta a prevenire abusi. - Monitoraggio e auditing continuo
Implementare log e strumenti di analisi aiuta a rilevare comportamenti sospetti e potenziali violazioni di sicurezza. - Aggiornamento degli standard di sicurezza
È fondamentale adottare le versioni più recenti di OAuth, SAML e OpenID Connect per evitare vulnerabilità.
Confronto tra STS e altri sistemi di autenticazione
Caratteristica | Security Token Service (STS) | Identity Provider (IdP) | API Gateway |
Scopo principale | Emissione e gestione dei token di autenticazione | Gestione dell’identità e autenticazione | Protezione e gestione delle API |
Protocolli supportati | OAuth, SAML, OpenID Connect | SAML, LDAP, OAuth | OAuth, JWT |
Uso principale | Accesso federato e SSO | Centralizzazione degli utenti e autenticazione | Sicurezza delle API e gestione delle richieste |
Per concludere
Un Security Token Service (STS) è essenziale per la gestione sicura dell’autenticazione e dell’autorizzazione in ambienti cloud e on-premise.
Utilizzando protocolli standard e integrandosi con altre soluzioni di sicurezza, un STS offre un accesso sicuro e centralizzato alle risorse digitali.
Domande e risposte
- Cos’è un Security Token Service e a cosa serve?
È un servizio che emette token di autenticazione per accedere in modo sicuro a risorse digitali.
- Quali protocolli supporta un STS?
OAuth 2.0, SAML e OpenID Connect sono i più utilizzati.
- Quali vantaggi ha rispetto alle password?
Riduce il rischio di furto di credenziali e permette l’SSO.
- Come funziona l’autenticazione con STS?
Il STS autentica l’utente e genera un token che viene utilizzato per accedere ai servizi richiesti.
- Supporta l’autenticazione multi-fattore (MFA)?
Sì, molti STS possono integrarsi con sistemi MFA.
- Quali aziende offrono servizi STS?
Microsoft, AWS, Google, Okta e altre aziende tech.
- Come proteggere un STS dagli attacchi?
Implementando crittografia avanzata, log e auditing.
- Differenza tra STS e Identity Provider?
Un STS emette token, mentre un IdP gestisce identità.
- Un STS può essere usato in ambienti on-premise?
Sì, può essere integrato con sistemi locali e cloud.
- Best practices per la gestione di un STS?
Configurare scadenze sicure per i token, monitorare gli accessi e usare MFA.