A partire dalla versione Windows Server 2003 R2, Microsoft ha introdotto il servizio ADFS (Active Directory Federation Services) come lo strumento di gestione del controllo di accesso e di autorizzazione di tipo Claim. ADFS si appoggia ad un dominio Active Directory.
All’utente che viene autenticato vengono forniti una serie di Claim relativi alla sua identità e questi vengono inseriti in un Token firmato digitalmente (SAML Token), Token che viene poi riconosciuto ed utilizzato dalle varie applicazioni che accettano questo schema di autenticazione, fornendo di fatto all’utente una modalità di Single Sign On applicativo.
Il vantaggio è che l’utente si autentica una volta sola sul servizio ADFS e non deve fornire le sue credenziali ai vari server applicativi che potrebbero essere anche esterni alla rete che contiene il Dominio Active Directory.
Normalmente l’architettura ADFS utilizza due server, eventualmente ridondabili: uno che dialoga direttamente con il Dominio Active Directory e quindi si trova all’interno della rete aziendale ed un Proxy che non fa parte del dominio e normalmente viene posizionato in DMZ ed esposto in Internet attraverso la porta HTTPS.
Eventualmente il server ADFS interno può coincidere con il server Domain Controller dell’Active Directory.
Tutti i flussi di dialogo evidenziati in azzurro in figura sono HTTPS.
In pratica l’utente Interno dialoga direttamente con il server ADFS Interno: in questo caso se utilizza un client Windows può anche effettuare con esso un’autenticazione automatica via Kerberos.
L’utente esterno viene rediretto verso il server ADFS Proxy e qui necessariamente deve effettuare un’autenticazione esplicita su un Portale.
In entrambi i casi all’utente viene alla fine fornito un Token SAML che può essere utilizzato verso l’applicazione in grado di accettare i Claim.
L’utente che deve accedere ad un’Applicazione di tipo Claim viene normalmente rediretto verso il servizio di Identity Provider: solo dopo che ha ottenuto un Token SAML, può ritornare a presentarsi all’applicazione presentando così delle credenziali valide.
Il processo si svolge attraverso queste fasi:
dove il Service Provider è l’applicazione che richiede l’autenticazione di tipo Claim e l’Identity Provider è nel nostro caso il servizio Microsoft ADFS.
Il Token Claim che viene generato dal servizio Microsoft ADFS deve essere adattato all’applicazione: devono essere generati gli attributi Claim che quest’ultima si aspetta per identificare ed autorizzare correttamente l’utente.
Da questo punto di vista ADFS è molto flessibile perché consente per ogni applicazione web di definire la modalità nella quale viene costruito il Token SAML.
Uno dei casi più diffusi è quello di integrazione con un’Applicazione web che utilizza il framework Shibboleth: si tratta di un’infrastruttura basata sullo standard aperto Security Assertion Markup Language (SAML). ADFS assume il ruolo di Identity Provider (IdP) fornendo le informazioni sull’utente, mentre l’Applicazione quello di Service Provider (SP) utilizzando le informazioni e dando accesso ai contenuti protetti.
Shibboleth è open source ed è rilasciato con licenza Apache 2.
Shibboleth può quindi essere utilizzato come framework per fornire agli utenti un Single Sign On su Applicazioni web tipo Erizone o Neteye.
Lato Microsoft ADFS viene configurato un Relying Party Trust per ciascuna Applicazione web: all’interno delle Claim Rules che definiscono quali Claim vengono generati ed eventualmente come devono essere trasformati a partire dai dati presenti in Active Directory.
Nel caso di Shibboleth ad esempio volendo fornire lo User Principal name (UPN) come Claim nel Token generato, nelle Issuance Transform Rules va specificato prima di leggere da Active Directory lo User-Principal-Name e di metterlo nel Claim standard Windows Account Name.
Una seconda regola di tipo Custom, eseguita subito dopo, trasforma il Claim Windows Account Name in un Claim riconosciuto da Shibboleth:
c:[Type == “http://schemas.microsoft.com/ws/2008/06/identity/claims/
windowsaccountname”]
=> issue(Type = “urn:oid:1.3.6.1.4.1.5923.1.1.1.6”, Value = c.Value, Properties[“http://schemas.xmlsoap.org/ws/2005/05/identity/
claimproperties/attributename”] = “urn:oasis:names:tc:SAML:2.0:attrname-format:uri”);
Di fatto alla fine il Token SAML conterrà un Claim definito come
urn:oid:1.3.6.1.4.1.5923.1.1.1.6
in grado di essere letto ed utilizzato dal Framework Shibboleth.
In modo analogo può essere eventualmente letto l’attributo samAccountName di Active Directory e fornito a Shibboleth, nel caso in cui l’Applicazione web intenda utilizzare questo attributo per identificare l’utente.