Quando si gestiscono più siti web e servizi web bilanciati (
NLB = Network Load Balancer) su più macchine di front-end di una Farm, torna utile sincronizzare il
machineKey degli applicativi
ASP.NET tra le varie macchine.
Questo sopratutto se il bilanciatore non è in grado di mantenere l'affinità per
IP chiamante e si utilizza, come metodo di login, il single sing-on su
ADFS.
schema logico semplificato di un NLB Il bilanciatore o
NLB può essere sia hardware che software, ma potrebbe essere anche un proxy server che smista il traffico di rete ad esempio in
Round-robin o altro algoritmo.
Il
machineKey è mantenuto a livello di
macchina ma è possibile impostarlo in modo indipendente su ogni sito web tramite il
web.config locale al sito:
<?xml version="1.0"?>
<configuration>
<system.web>
<machineKey
validationKey="21F090935F6E49C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75D7AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281B"
decryptionKey="ABAA84D7EC4BB56D75D217CECFFB9628809BDB8BF91CFCD64568A145BE59719F"
validation="SHA1"
decryption="AES"
/>
</system.web>
<configuration>
la stessa impostazione va allineata nel web.config del sito in tutti i server che fanno capo al bilanciatore.
Il
machineKey viene usato dal framework ogni qual volta si deve creare una comunicazione cifrata.
Questo vuol dire che durante la fase di login ad
ADFS se, ad esempio, la prima chiamata arriva, tramite il bilanciatore, sul server1 questo rispondera con un redirect (302) ad
ADFS. Una volta autenticato
ADFS farà un redirect sull'indirizzo bilanciato, ma questa volta il bilanciatore lo indirizza sul server2, se il
machineKey è diverso il server2 non riuscirà a leggere il token di autenticazione in quanto originato dal server1.
I valori di
machineKey possono essere generati tramite la console di
IIS:
IIS machineKey premendo
Generate Key e poi
Apply:
IIS generate machineKey Vedi anche:
How To: Configure MachineKey in ASP.NET 2.0